Sql 查询 select 行计数,即使至少有一个值与变量列表中的列匹配

Sql query to select row count even when at least one value matches in column out of list of variables

我有一个名为 Kits 的 table 名称,其中有 5 列图书 ISBN。

我为此编写了一个 sql 查询,但只有当最后一个值与任何行匹配时我才会得到行输出。在我的例子中,该值为 7589765432 这是我的 sql 查询:

Select * 
  from kits k
  left 
  join kits_cstm kc
    on k.id = kc.id_c 
 where '8192933563' 
   and '8192933567' 
   and '8192933568' 
   and '8192933564' 
   and '7589765432' IN (kc.isbn_book_1_c,kc.isbn_book_2_c,kc.isbn_book_3_c,kc.isbn_book_4_c,kc.isbn_book_5_c) 
   and kc.city_c = 'BAN' 
   and kc.kit_for_c = 'SCHL' 
   and k.deleted = 0 
 ORDER 
    BY k.kit_id DESC 

该语法永远不会起作用:https://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html

'a' AND 'b' AND 'c' IN (....)

将被执行为

('a' AND 'b') AND ('c' IN (...))
    TRUE      AND (....)

您不能为 SQL.

自行制定解析规则

您还应该 normalize 您的 table。如果你在某个时候需要 6 个 isbn 怎么办?现在你已经改变了你的table。 ISBN 应该在它们自己的 child table 中,将您的问题简化为 where subtable.isbn IN ('a', 'b', ...)

您应该规范化您的表格。但是,如果您受困于此数据结构,则只需使用多个 in 语句即可。另外,你不想要 left join,你想要常规的 join:

Select count(*) 
from kits k join
     kits_cstm kc
     on k.id = kc.id_c 
 where '8192933563' IN (kc.isbn_book_1_c, kc.isbn_book_2_c, kc.isbn_book_3_c, kc.isbn_book_4_c, kc.isbn_book_5_c) 
   and '8192933567' IN (kc.isbn_book_1_c, kc.isbn_book_2_c, kc.isbn_book_3_c, kc.isbn_book_4_c, kc.isbn_book_5_c) 
   and '8192933568' IN (kc.isbn_book_1_c, kc.isbn_book_2_c, kc.isbn_book_3_c, kc.isbn_book_4_c, kc.isbn_book_5_c) 
   and '8192933564' IN (kc.isbn_book_1_c, kc.isbn_book_2_c, kc.isbn_book_3_c, kc.isbn_book_4_c, kc.isbn_book_5_c) 
   and '7589765432' IN (kc.isbn_book_1_c, kc.isbn_book_2_c, kc.isbn_book_3_c, kc.isbn_book_4_c, kc.isbn_book_5_c) 
   and kc.city_c = 'BAN' 
   and kc.kit_for_c = 'SCHL' 
   and k.deleted = 0 
ORDER  BY k.kit_id DESC 

您不能使用 "AND" 将值连接到一个运算符

错误的方式:WHERE '8192933536' AND '8192933567' IN ({array]) 正确的方法:WHERE '8192933536' IN ({array]) 和 '8192933567' IN ({array])

但我怀疑你实际上想做的更像是:

SELECT 
      * 
FROM 
     kits k LEFT JOIN kits_cstm kc
          ON k.id = kc.id_c 
WHERE 
     ('8192933563' IN (kc.isbn_book_1_c,kc.isbn_book_2_c,kc.isbn_book_3_c,kc.isbn_book_4_c,kc.isbn_book_5_c)
      OR 
     '8192933567' IN (kc.isbn_book_1_c,kc.isbn_book_2_c,kc.isbn_book_3_c,kc.isbn_book_4_c,kc.isbn_book_5_c)
      OR 
     '8192933568' IN (kc.isbn_book_1_c,kc.isbn_book_2_c,kc.isbn_book_3_c,kc.isbn_book_4_c,kc.isbn_book_5_c)
      OR 
     '8192933564' IN (kc.isbn_book_1_c,kc.isbn_book_2_c,kc.isbn_book_3_c,kc.isbn_book_4_c,kc.isbn_book_5_c)
      OR 
     '7589765432' IN (kc.isbn_book_1_c,kc.isbn_book_2_c,kc.isbn_book_3_c,kc.isbn_book_4_c,kc.isbn_book_5_c) 
      )
AND
     kc.city_c = 'BAN' 
AND
     kc.kit_for_c = 'SCHL' 
AND
     k.deleted = 0 
ORDER BY 
     k.kit_id DESC