我有两张表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 |
+---------------------+
对于那些质疑目的的人,我正在尝试为配置文件实现动态属性;并且需要完整的归属列表以进一步过滤那些具有任何其他条件的列表。
答案 0 :(得分:3)
SELECT *
FROM props
WHERE id IN
(
SELECT id
FROM props
WHERE name = 'mat' AND value < 50
)
答案 1 :(得分:3)
您也可以使用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
)。