[英]Fetch all rows for a foreign key if even one row matches condition
我有兩個桌子的profile
和props
。
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.