Mysql"IN"为AND

Roc*_*och 1 mysql

我想知道mysql IN是否可以用作AND语句:

SELECT item_id
FROM table_items as a i
WHERE i.attribute_id
IN (
  SELECT attribute_id
  FROM table_attribute as a
  WHERE [..]
)
Run Code Online (Sandbox Code Playgroud)

我想从table_b中选择包含table_a中所选值的所有项目.换句话说,先前的查询是使用OR进行选择,我希望它是AND.

Rob*_*nik 5

IN就像一个OR运算符.这不是一个AND.因此,更像是从表B获取行,其中ID为1,2或3. AND运算符无论如何都不起作用,因为具有某个ID的某个行只有一个值而不是同时具有多个值.并且意味着特定的行ID应该具有多个值.

请改用表JOIN

如果我理解你想做什么,那么你应该在这两个表上使用INNER JOIN:

SELECT b.ID
FROM TableB AS b
  JOIN TableA AS a
  ON (a.ID = b.ID)
Run Code Online (Sandbox Code Playgroud)

这样,您将从TableB中获取TableA中具有相应行的那些行.如果您的表是相关的并且TableA是TableB的子集(因此TableB是主键,TableA中的ID是指向TableB的外键),那么这是您的解决方案.

当然,您必须更改表名和表列.

检查有关JOIN语法的MySql文档.