-1

我一直在尝试执行此查询,但它不起作用。

如果有人提供帮助,将不胜感激;

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

2 回答 2

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

于 2012-11-29T13:14:40.880 回答
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

参考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 测试 2

于 2012-11-29T13:19:33.543 回答