Showing posts with label point. Show all posts
Showing posts with label point. Show all posts

Monday, March 26, 2012

Joint MSDE 7 and MSDE 2000 on same Server

Hi,
Is it point to have an MSDE 7 and MSDE 2000 instance on the same server.
Also is this supported
Any gotchas
Si
hi,
"BigSi" <webmaster@.shine.net> ha scritto nel messaggio
news:ukGD6B2MEHA.3052@.TK2MSFTNGP12.phx.gbl...
> Hi,
> Is it point to have an MSDE 7 and MSDE 2000 instance on the same server.
> Also is this supported
> Any gotchas
you can install MSDE 1.0, which will become the default instance, and a
named instance of MSDE 2000..
you have to install at least MDAC 2.6 for MSDE 2000, but service pack 3a,
which I strongly suggest and advise you to install, requires MDAC 2.7
service pack 1...
hth
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz/DbaMgr.shtmhttp://italy.mvps.org
DbaMgr2k ver 0.7.0 - DbaMgr ver 0.53.0
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual
interface)
-- remove DMO to reply

Friday, March 9, 2012

JOIN without excluding non-joined rows?

Good morning, folks. I'll get right to the point.

I have an MSSQL db with 3 tables. Table A holds users' data with logins and such. Table B holds workstations with machine names, hardware info, etc. Lastly, Table C holds record IDs from A and B in order to keep track of workstations paired to users. Some workstations don't have users yet, some users don't have workstations yet.

HOWEVER, I need to display all users WITH their workstations, but that same result set needs to include users which may not have a workstation associated with them

My current join query works beautifully, but does NOT include users with no workstations associated with them per Table C.

Table A is lan_user
id_user user_name user_login

Table B is lan_ws
id_ws ws_name ws_model operating_system

Table C is lan_userws_rel (as in, "relationships")
id_userws_rel ws_id user_id

select lan_user.*, lan_userws_rel.*, lan_ws.* from lan_user INNER JOIN lan_userws_rel ON lan_user.id_user = lan_userws_rel.user_id INNER JOIN lan_ws ON lan_ws.id_ws-lan_userws_rel.ws_id

Some additional information:
Workstations can have multiple users and vice versa, but I only really need one pairing in my result set - doesn't matter which one.You should use LEFT JOIN but be aware when you will use a WHERE-clause on the 'not present' items
Info from books online (the guide in troubled moments!)

Joins can be categorized as:

Inner joins (the typical join operation, which uses some comparison operator like = or <>). These include equi-joins and natural joins.

Inner joins use a comparison operator to match rows from two tables based on the values in common columns from each table. For example, retrieving all rows where the student identification number is the same in both the students and courses tables.

Outer joins. Outer joins can be a left, a right, or full outer join.

Outer joins are specified with one of the following sets of keywords when they are specified in the FROM clause:

LEFT JOIN or LEFT OUTER JOIN

The result set of a left outer join includes all the rows from the left table specified in the LEFT OUTER clause, not just the ones in which the joined columns match. When a row in the left table has no matching rows in the right table, the associated result set row contains null values for all select list columns coming from the right table.

RIGHT JOIN or RIGHT OUTER JOIN

A right outer join is the reverse of a left outer join. All rows from the right table are returned. Null values are returned for the left table any time a right table row has no matching row in the left table.

FULL JOIN or FULL OUTER JOIN

A full outer join returns all rows in both the left and right tables. Any time a row has no match in the other table, the select list columns from the other table contain null values. When there is a match between the tables, the entire result set row contains data values from the base tables.

|||{ :-O

Sweet mother of god. LEFT JOIN did essentially just what I needed.

This is proof that I have so, so much to learn about SQL. For the record, I really did look into this before posting, but I sometimes get lost in the examples given in my books.

THANK YOU.

Here was my final query:

select lan_user.*, lan_userws_rel.*, lan_ws.*
from lan_user
LEFT JOIN lan_userws_rel on lan_user.id_user = lan_userws_rel.user_id
LEFT JOIN lan_ws on lan_ws.id_ws = lan_userws_rel.ws_id
ORDER BY id_user

Monday, February 20, 2012

Join order considerations in SQL Server (2005)

I'm doing a bit of research on join order in terms of how it affects performance in SQL Server (specifically 2005).

Can someone point me to some sites that do a good job of explaining this, or, can you give me a good overview of the topic?

As far as performance goes, I think you will be fine regardless of your join order for the most part. In outer joins (think of a LEFT OUTER JOIN) the order of your tables will matter because the result set would be different depending on which table is the outer and which table is the inner. That is not so much a performance consideration as it is a results consideration.

One motto I always live by is to try it and see. So you can get a lot of replies with links, but I say look at the query plans (You can choose display estimated query plan or if you have a test system you can display the actual execution plan when the query finishes) and play with different join orders.

If you are relatively new to query plans there are a ton of great books. I would highly reccomend Itzik Ben Gan's Inside SQL Server: T-SQL Programming book for his treatment of this topic.

|||

Justin:

If you are wanting to enforce the join order and go rules based you need to SET FORCEPLAN ON; however, this is not something that should normally be practiced. Our standards here pretty much forbid this use of this setting.


Dave