簡體   English   中英

即使有一行匹配條件,也要獲取外鍵的所有行

[英]Fetch all rows for a foreign key if even one row matches condition

我有兩個桌子的profileprops

profile.ID是帶有其他列的props的外鍵。

我需要使用條件查詢表props ,但返回具有與滿足條件的行相同的外鍵的所有行。

例:

+---------------------+
|ID  |  name  | value |
+---------------------+
|1   |  eng   | 60    |
|1   |  mat   | 70    |
|1   |  sci   | 80    |
|2   |  eng   | 90    |
|2   |  mat   | 40    |
|2   |  sci   | 50    |
|3   |  eng   | 70    |
|3   |  mat   | 40    |
|3   |  sci   | 50    |
+---------------------+

對於上表,如果我查詢name = 'mat' AND value < 50 ,我得到

+---------------------+
|ID  |  name  | value |
+---------------------+
|2   |  mat   | 40    |
|3   |  mat   | 40    |
+---------------------+

相反,我需要

+---------------------+
|ID  |  name  | value |
+---------------------+
|2   |  eng   | 90    |
|2   |  mat   | 40    |
|2   |  sci   | 50    |
|3   |  eng   | 70    |
|3   |  mat   | 40    |
|3   |  sci   | 50    |
+---------------------+

對於那些質疑此目的的人,我正在嘗試為配置文件實現動態屬性。 並且需要完整的屬性列表,以進一步過濾具有任何其他條件的屬性。

SELECT *
  FROM props
  WHERE id IN
  (
     SELECT id
       FROM props
       WHERE name = 'mat' AND value < 50
  )

您也可以使用INNER JOIN代替WHERE id IN...語句來完成此操作:

SELECT  A.ID,
        A.Name,
        A.Value
  FROM  props A
    INNER JOIN (SELECT  ID
                  FROM  props
                  WHERE (Name = 'mat' AND value < 50)) B ON B.ID = A.ID 

因此,在B獲取所有與條件匹配的ID ,然后將它們簡單地連接到props表(別名A )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM