2017-10-20 35 views
1

對不起,這個可怕的標題。想象一下這樣的表格:http://sqlfiddle.com/#!9/48d921/1'探索性'SQL查詢使用一個標準來查找更多條件

在這裏,我們爲名爲「Bob」的所有用戶運行查詢,但我們也對與「Bob」相同的郵政編碼中的所有用戶以及同一個「鍵入「爲Bob。

你可以看到我加入了相同的表格兩次來達到這個目的。它的麻煩是它不能縮放;我想要「探索」的標準越多,我必須加入相同的表格越多,這使得陳述更加繁瑣。

所以:

  • 什麼是做到這一點的最好方法是什麼?
  • 這種類型的查詢是否有名稱?
+0

我不認爲你的SQLFiddle做你說什麼它 - 這是我的解釋:' SELECT u.name,link.name FROM USER u 加入地址a on a.user = u.id 加入地址a1在a1.postcode = a.postcode 加入link.id = a1的用戶鏈接。用戶 W這裏u.name =「鮑勃」 和u.id!= link.id' –

+0

是的,錯過了一個選擇和額外的標準,編輯。 –

+0

我絕不是專家,但它聽起來像是在非關係數據庫中更好處理的那種查詢模式。即這聽起來對我來說是「圖表」。 –

回答

1

更新

SELECT 
FROM user 
where u.name="Bob" 
    OR (u.postcode in (SELECT a.postcode 
        FROM USER u 
        JOIN ADDRESS a on a.user=u.id 
        WHERE u.name="Bob") 
    ) 
    OR (u.type  in (SELECT ut.type 
        FROM USER u 
        JOIN USER_TYPE ut1 on u.id=ut1.user 
        WHERE u.name="Bob") 
    ) 

所以你掃描用戶表中只有一次的每條記錄檢查連接標準答案

+0

這將如何擴展到多個「鏈接」標準,與郵政編碼處於同一級別並以相同的方式工作? –

+0

可能是我不明白你的問題。你可以創建一個更多的查詢,添加一個「連接」cirteria – StanislavL

+0

我已經添加了另一個標準。你可以看到select語句越來越混亂。 –