我对MYSQL很新,并且想要让它返回每个是否存在,但是显示的结果不是我所期望的。我运行了这个查询: -
SELECT product_id,code,
IF( EXISTS( SELECT 1 FROM product WHERE `product_id` IN ('001','002') ), 1, 0) AS exist
FROM product
WHERE `product_id` IN ('001','002');
表格: -
product_id | code
001 | Dark
我的预期结果: -
product_id | code | exist
001 | Dark | 1
002 | | 0
结果: -
product_id | code | exist
001 | Dark | 1
任何想法如何产生我预期的结果?
答案 0 :(得分:0)
MySQL只是为您提供了正确的结果,没有id = '002'
的记录,因此它不会包含在结果中。
保留程序的逻辑协议,而不是MySQL。
答案 1 :(得分:0)
如果我们想要在结果集中返回的product_id
的值不在product
表中(例如' 002'),我们需要引用包含的行源价值。
一种选择是使用内联视图。举个例子:
SELECT i.product_id
, p.code
, IF(p.product_id IS NULL,0,1) AS `exist`
FROM (
SELECT '001' AS product_id
UNION ALL SELECT '002'
UNION ALL SELECT '003'
) i
LEFT
JOIN product p
ON p.product_id = i.product_id
ORDER BY i.product_id
我们不必使用类似的内联视图。例如,如果我们有一个表或临时表,其中包含我们想要返回的值的行:
SELECT i.product_id
, p.code
, IF(p.product_id IS NULL,0,1) AS `exist`
FROM all_possible_product_id i
LEFT
JOIN product p
ON p.product_id = i.product_id
WHERE i.product_id IN ('001','002')
ORDER BY i.product_id