我有3個表格:WATER_TENDER,ENGINE和TRAILER。一次抓取3個表格,只檢索與條件匹配的表格(SQL)
它們都具有EQ_ID作爲主鍵和一些其他屬性,對於每個表都不同。例如,EQ _ID ='WT-123'只在WATER _TENDER表內指向一行,而在其他表內沒有任何指示。
因爲我事先不知道EQ _ID,所以我不知道要查看哪張表,我該如何編寫一個基於EQ_ID檢查所有3個表的單個查詢,並檢索與該表匹配的表EQ _ID指定?
我有3個表格:WATER_TENDER,ENGINE和TRAILER。一次抓取3個表格,只檢索與條件匹配的表格(SQL)
它們都具有EQ_ID作爲主鍵和一些其他屬性,對於每個表都不同。例如,EQ _ID ='WT-123'只在WATER _TENDER表內指向一行,而在其他表內沒有任何指示。
因爲我事先不知道EQ _ID,所以我不知道要查看哪張表,我該如何編寫一個基於EQ_ID檢查所有3個表的單個查詢,並檢索與該表匹配的表EQ _ID指定?
您可以使用UNION ALL來選擇所有錶行和選擇所有列,提供NULL當該列不存在:
SELECT a, b, c, d, e, f FROM (
SELECT a, b, NULL AS c, NULL AS d, NULL AS e, NULL AS f FROM WATER_TENDER
UNION ALL
SELECT NULL AS a, NULL AS b, c, d, NULL AS e, NULL AS f FROM ENGINE
UNION ALL
SELECT NULL AS a, NULL AS b, NULL AS C, NULL AS D, e, f FROM TRAILER) AS T1
WHERE _ID = @id
這是一個有點髒不過,恕我直言。如果你必須這樣做,感覺你的設計有問題。
這會起作用,但對於大量的數據我想它會造成相當的性能損失。 –
如果您擔心性能,可以將WHERE子句引入到各個SELECT中。我想大多數數據庫會自動爲您執行此優化。 –
我不認爲你可以在正常的選擇查詢中做到這一點。如果可能的話,我建議你可以:
如果您決定來解決模型中的位,你可以使用:
SELECT Type, a ,b ,c ,d ,e ,f ,g ,h
FROM Equipment AS eq
LEFT JOIN ENGINE AS en ON en.EQ_ID = eq.EQ_ID
LEFT JOIN TRAILER AS tr ON tr.EQ_ID = eq.EQ_ID
LEFT JOIN WATER_TENDERER AS wt ON wt.EQ_ID = eq.EQ_ID
WHERE eq.EQ_ID = 'WT-123'
alt text http://www.damirsystems.com/dp_images/equipment_model_01.png
+1超越問題並提供圖表。 –
我認爲 「只檢索其指定的?? EQ _ID匹配行」 更正確...... – Mirko
您的努力將會更好地用於構建適當的表格和參考完整性。 –