如果该ID存在于其他表中,则仅从Array中选择id

时间:2017-05-21 14:07:44

标签: mysql sql arrays

我有两张桌子:

    ____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来自颜色的颜色(我的数组)...只有当它们存在于另一个表中时?...

2 个答案:

答案 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中的行数成线性关系。在这里,我们可能只需要在找到这样的颜色之前检查有限数量的行。