[英]Gather values from different tables based on a table field
假設我具有以下表結構:
main_id | 類型 信息
first segway excellent
second car mercedes
third bike sliceofwind
id | 年級
1 excellent
2 bad
3 (...)
id | 牌
1 mercedes
2 honda
3 (...)
id | 輪胎
1 sliceofwind
2 flatasfaque
3 (...)
我想做的是根據table1的類型從不同的表中獲取信息。
這是我嘗試過的查詢的一般示例
SELECT (CASE
WHEN table1.type = 'segway' AND segway.grade = table1.information
THEN segway.id,
WHEN table1.type = 'car' AND car.brand = table1.information
THEN car.id,
WHEN table1.type = 'bike' AND bike.tires = table1.information
THEN bike.id
END) AS information
FROM table1,segway,bike,car WHERE table1.main_id IN ("ids")
該查詢的結果是笛卡爾積,因為盡管案例內部存在限制,但仍會檢索所有表中的所有數據,因為並非所有表都具有限制。 我想知道是否有一種方法可以解決此問題而無需更改表結構,是否不希望獲得一些提示! (我要處理一些古怪的sql東西,我在這里問的是,是否確實可以做到這一點,盡管有人建議還是不建議這樣做,為什么!)。
這可能是做到這一點的一種方法。
SELECT t1.*
FROM table1 t1
LEFT JOIN segway s
on T1.main_id = s.id and T1.type= 'segway'
LEFT JOIN car c
on T1.main_id = c.id and T1.type= 'car'
LEFT JOIN bike b
on T1.main_id = b.id and T1.type= 'bike'
WHERE t1.main_ID in (SomeList)
當Table1的類型不匹配時,segway,car和bike表的列將為null。 但是,這似乎會給您帶來比您所需更多的數據/列。 我認為您最好在數據庫外編寫單獨的查詢,然后根據它們選擇的值來調用它們。 或使用數據庫中的過程和條件邏輯返回所需的結果集。 (再次在數據庫中使用3個獨立的查詢和條件邏輯),但在不了解用例的情況下,我無法真正說出哪種效果更好。
我們可以將品牌,輪胎和等級進一步合並為“價值”字段,如下所示
Select t1.*, coalese(s.grade,c.brand,b.tires) as value
但我不確定這是否也有幫助。
如果我們只需要返回表1的值並從其他表中設置值...您說的是怪癖,而不是我。
我看不到笛卡爾會怎樣發生。
這將是您的預期結果,請嘗試此查詢。
SELECT (CASE WHEN s.`id` IS NOT NULL THEN s.`id`
WHEN c.`id` IS NOT NULL THEN c.`id`
WHEN b.`id` IS NOT NULL THEN b.`id`
END) AS information FROM table1 AS t1
LEFT JOIN segway s ON t1.type= 'segway'
LEFT JOIN car c ON t1.type= 'car'
LEFT JOIN bike b ON t1.type= 'bike'
WHERE t1.main_ID IN (1, 2, 3) AND (t1.information = s.`grade` OR
t1.`information`=c.brand OR
t1.`information`=b.tires);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.