2010-02-16 60 views
0

這裏是一個結構: -/ alt text http://s004.radikal.ru/i207/1002/79/ed7ac0a97d0b.jpg 所以我需要選擇 ID,並使用類型從CfgListGroupParIzm名稱爲CfgIzmeritel何ForRun - 假 它選擇組。案例ForRun?

SELECT A.ID_ListGroupParIzm, A.Name 
FROM CfgListGroupParIzm A, CfgIzmeritel B 
WHERE A.ID_TypeIzmerit = B.ID_TypeIzmerit 
AND [email protected]_Izmerit AND A.ForRun=0 

ID和NamePoint(從CfgIzmerPoint )+從CfgListGroupParIzm來自同一CfgIzmeritel名在ID_Izmerit從CfgIzmeritel = ID_Izmerit從CfgListGroupParIzm CfgIzmerPoint和ForRun - 真

所以最後我需要像

SELECT A.ID_ListGroupParIzm, A.Name 
FROM CfgListGroupParIzm A, CfgIzmeritel B 
WHERE A.ID_TypeIzmerit = B.ID_TypeIzmerit 
AND [email protected]_Izmerit AND A.ForRun=0 

UNION -- ?? 

SELECT A.ID_ListGroupParIzm, (C.Name + A.Name) AS Name 
FROM CfgListGroupParIzm A, CfgIzmeritel B, CfgIzmerPoint C 
WHERE A.ID_TypeIzmerit = B.ID_TypeIzmerit 
AND [email protected]_Izmerit AND A.ForRun=1 
AND [email protected]_Izmerit 

我想我需要使用一些其他建築沒有聯盟,因爲我做出幾乎相同的兩個選擇: -/

回答

1

你可以使用UNION ALL

SELECT A.ID_ListGroupParIzm, A.Name 
FROM CfgListGroupParIzm A, 
     CfgIzmeritel B 
WHERE A.ID_TypeIzmerit = B.ID_TypeIzmerit 
AND  [email protected]_Izmerit 
AND  A.ForRun=0 
UNION ALL 
SELECT A.ID_ListGroupParIzm, 
     (C.Name + A.Name) AS Name 
FROM CfgListGroupParIzm A, CfgIzmeritel B, CfgIzmerPoint C 
WHERE A.ID_TypeIzmerit = B.ID_TypeIzmerit 
AND  [email protected]_Izmerit AND A.ForRun=1 
AND  [email protected]_Izmerit 

UNION ALL會帶來從兩個查詢中返回所有結果。如果你需要這個明確的列表,沒有任何重複,請使用UNION。

看一看Union vs. Union All

SQL UNION Operator

也請記住,比A,B,C等其他使用別名是比較合適的。嘗試使用稍微更具描述性的別名,以便在更大的查詢中輕鬆進行跟蹤。

如果我的假設是正確的,CfgIzmeritel和CfgIzmerPoint是,一對一的,你可以試試這個使用

SELECT grp.ID_ListGroupParIzm, 
    CASE 
     WHEN ForRun=1 AND pnt.ID_TypeIzmerit IS NOT NULL THEN (C.Name + A.Name) 
     ELSE grp.Name 
    END AS Name 
FROM CfgListGroupParIzm grp INNER JOIN 
     CfgIzmeritel item ON grp.ID_TypeIzmerit = item.ID_TypeIzmerit LEFT JOIN 
     CfgIzmerPoint pnt ON grp.ID_TypeIzmerit = pnt.ID_TypeIzmerit 
WHERE [email protected]_Izmerit 

從你應該能夠忽略ForRun where子句,因爲這隻會在使用CASE聲明。

我認爲,爲了可讀性,您應該使用UNION/UNION ALL,並且只在性能不佳時才嘗試創建單個查詢(查看索引後)。

+0

對別名達成了一致,但是工會和工會在這裏有什麼不同?有沒有什麼辦法可以在一個選擇中做出來。 。 。 – Cynede

+0

從我在第二個查詢中可以看到的情況來看,CfgIzmeritel和CfgIzmerPoint之間存在1:1的關係(我在CfgIzmerPoint中看不到任何聯接),因此對於ForRun = 1,您正在實施INNER JOIN,而不是在第一個查詢中這樣做。這使得在一個查詢中創建它有點困難。 –

+0

不是一對一的,在一個CfgIzmeritel上有很多點......我想我也需要在這裏選擇他們的ID或null如果這是CfgIzmeritel也CfgIzmerPoint沒有ID_TypeIzmerit。 。 。 – Cynede