我有两张桌子:
____SelectedColors_____
|___Name___|___Colorid__|
| John | 10 |
| Al | 16 |
John | 11
______Colors_______
|___id___|___Color__|
| 10 | black |
| 22 | red |
11 | green |
我也得到了一个阵列:(粉色,黑色,紫色,绿色,红色)
我想在表格颜色中选择这些颜色,只要它们存在于SelectedColors表中。
目前我有这个
$sql = "SELECT id
FROM Colors
WHERE Color IN (pink, black, purple, green, red )
GROUP BY id
HAVING COUNT(DISTINCT Color)";
我也许可以在SelectedColors表中进行第二次查询并过滤它们。
但是我想一气呵成,有可能吗?
选择id来自颜色的颜色(我的数组)...只有当它们存在于另一个表中时?...
答案 0 :(得分:1)
如果我理解正确,你需要这个:
SELECT Colors.id FROM Colors
join SelectedColors
on Colors.id = SelectedColors.Colorid
WHERE Colors.Color IN ('pink', 'black', 'purple', 'green', 'red' )
GROUP BY Colors.id
答案 1 :(得分:0)
简单的查询可能是:
SELECT c.id
FROM Colors AS c
WHERE c.Color IN ('pink','black','purple','green','red')
AND EXISTS (SELECT 1
FROM SelectedColors AS s
WHERE s.Colorid = c.id)
所以在这里我们添加一个存在的约束 SelectedColors
中的一行,Colorid
等于颜色的id
。
这可能比GROUP BY
查询更有效,因为当你JOIN
时,这会创建一个巨大的表。因此,GROUP BY
将与SelectedColors
中的行数成线性关系。在这里,我们可能只需要在找到这样的颜色之前检查有限数量的行。