针对单列的MySql AND运算符(一列两行之间的比较)

时间:2012-11-29 13:13:24

标签: php mysql sql

我一直在尝试执行此查询,但它无效。

如果有人帮忙,我会很感激;

SELECT DISTINCT(fld_tech_id) 
FROM tbl_tech_properties 
WHERE fld_tech_category_value_id = 236 
    AND fld_tech_category_value_id = 234

2 个答案:

答案 0 :(得分:4)

您的WHERE条件不可能匹配,因为它针对表中的每一行进行了测试,并且没有一行可以同时使fld_tech_category_value_id等于234和236。相反,您应该按fld_tech_id进行分组,并检查您的组是否包含两行。

SELECT fld_tech_id
FROM tbl_tech_properties
WHERE fld_tech_category_value_id IN (234, 236)
GROUP BY fld_tech_id
HAVING COUNT(DISTINCT fld_tech_category_value_id) = 2

查看在线工作:sqlfiddle

答案 1 :(得分:2)

<击> 你为什么不用

SELECT DISTINCT fld_tech_id
FROM tbl_tech_properties 
WHERE fld_tech_category_value_id IN (236,234) ;

基于参考样本数据的结果:

样本表:

FLD_TECH_ID     FLD_TECH_CATEGORY_VALUE_ID
1               234
2               256
3               236
3               250
2               226
3               216
1               240
1               236

<击> 结果

<击>
FLD_TECH_ID
1
3

REFERENCE SQLFIDDLE

有效的解决方案:

SELECT DISTINCT fld_tech_id
FROM tbl_tech_properties AS t
WHERE EXISTS
      ( SELECT *
        FROM tbl_tech_properties AS t1
        WHERE t1.fld_tech_id = t.fld_tech_id
          AND t1.fld_tech_category_value_id = 236
      )
  AND EXISTS
      ( SELECT *
        FROM tbl_tech_properties AS t2
        WHERE t2.fld_tech_id = t.fld_tech_id
          AND t2.fld_tech_category_value_id = 234
      )  ;

参考 SQL-Fiddle test 2