Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 当两个字段都包含时,为什么此SQL不起作用_Mysql_Sql - Fatal编程技术网

Mysql 当两个字段都包含时,为什么此SQL不起作用

Mysql 当两个字段都包含时,为什么此SQL不起作用,mysql,sql,Mysql,Sql,因此,第一个SQL返回零行: SELECT b.b_id FROM `buy` b INNER JOIN `buy_multiples` AS bm ON b.b_id = bm.b_id AND b.buy_status IN (2) WHERE bm.`option_type` = 'area_id' AND bm.selected_option_key IN (10) AND bm.`option_type` = 'bzips'

因此,第一个SQL返回零行:

SELECT b.b_id 
FROM `buy` b 
    INNER JOIN `buy_multiples` AS bm 
        ON b.b_id = bm.b_id 
        AND b.buy_status IN (2)  
WHERE bm.`option_type` = 'area_id'  
AND bm.selected_option_key IN (10)
AND bm.`option_type` = 'bzips'  
AND bm.selected_option_key IN (37027)
GROUP BY b.b_id 
第二条SQL返回b_id 5024和4987:

SELECT b.b_id 
FROM `buy` b 
    INNER JOIN `buy_multiples` AS bm 
        ON b.b_id = bm.b_id 
        AND b.buy_status IN (2)  
WHERE bm.`option_type` = 'bzips'  
AND bm.selected_option_key IN (37027)
GROUP BY b.b_id 
第三条SQL返回b_id 5024、4987和4989:

SELECT b.b_id 
FROM `buy` b 
    INNER JOIN `buy_multiples` AS bm 
        ON b.b_id = bm.b_id 
        AND b.buy_status IN (2)  
WHERE bm.`option_type` = 'area_id'  
AND bm.selected_option_key IN (10)
GROUP BY b.b_id 

为什么第一个查询返回零行?

在第一个查询中,您正在查找
bm.option\u type='area\u id'

bm.option\u type='bzips'
。这将始终返回0个结果。您要使用:

SELECT b.b_id 
FROM `buy` b 
    INNER JOIN `buy_multiples` AS bm 
        ON b.b_id = bm.b_id 
        AND b.buy_status IN (2)  
WHERE bm.`option_type` = 'area_id'  
AND bm.selected_option_key IN (10)
OR bm.`option_type` = 'bzips'  
AND bm.selected_option_key IN (37027)
GROUP BY b.b_id 

也许你在追求这样的东西

SELECT DISTINCT b.b_id 
  FROM buy b 
  JOIN buy_multiples bm 
    ON bm.b_id = b.b_id 
 WHERE b.buy_status IN (2)  
   AND (
        (bm.option_type = 'area_id' AND bm.selected_option_key IN (10)) 
     OR (bm.option_type = 'bzips' AND bm.selected_option_key IN (37027))
       );  

有些东西看起来不对劲。为什么5024同时出现在查询2和查询3中??它的
选项类型
值是多少?你确定你正在同一个数据库中运行查询吗?检查这个小提琴。逐个运行查询,您的第一个查询工作正常…您是正确的。我把第一个问题搞砸了。OR是我调试时留下的。假设它是一个ANDic3b3rg,谢谢,所以我想如果我想找到(bm.option_type='area_id'和bm.selected_option_key IN(10))和(bm.option_type='bzips'和bm.selected_option_key IN(37027))的位置,那么()会包含很多想法该表有b_id、option_type和selected_option_key您缺少点…WHERE子句对每个记录进行求值。整个子句必须为True,记录才能包含在结果中。使用和使用option_type的两个值没有意义。您基本上是说要查找具有两个option值的记录_键入stored,这是不可能的。很遗憾,我遵守了,谢谢你的帮助。我只是想知道如何才能做到这一点。我想我可能在设计此表的方式上有错误。