Php 针对单个列的MySql和运算符(一列中两行之间的比较)
我一直在尝试执行此查询,但它不起作用 如果有人帮忙,我将不胜感激Php 针对单个列的MySql和运算符(一列中两行之间的比较),php,mysql,sql,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 您的WHERE条件不可能匹配,因为它针对表中的每一行进行测试,并且没有一行的fld_tech_category_value_id同时等于234和236。相反,
SELECT DISTINCT(fld_tech_id)
FROM tbl_tech_properties
WHERE fld_tech_category_value_id = 236
AND fld_tech_category_value_id = 234
您的
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
在线查看它的工作情况:
你为什么不直接用它呢
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
结果:
参考文献
一个有效的解决方案:
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
) ;
参考您能用表格数据更新您的问题吗?请与我们分享您的
tbl\u tech\u properties
表格。所以至少我们知道为什么这两个答案不正确。。。或者详细说明你所说的“不工作”是什么意思。实际结果如何?您希望得到什么样的结果?很明显,这里的查询不会产生任何结果,因为不可能使某个值等于236和234。同时,这个问题也提供了足够的信息来解决它。@TheSmose-True显然它不能同时有两个值,这就是为什么我投了正确答案的原因。这就是说,我的评论是对一个新用户的一种温和的轻推,仅仅说一些“不起作用”并不能真正帮助我们帮助他们;)@TheSmose和Mark Byers,你能分享一下你强有力的回答之间的真正区别吗;)下面我们的呢?组的工作是由完成的,而不是由独立的来完成的,我们为什么需要将结果限制为2?请启发我们。人们可以一言不发地否决投票答案。。叹气:(@bonCodigo-此查询要求用户同时拥有234和236两个类别。您的响应只需要其中一个类别。注意标题中,OP需要一个和.PS-计数(不同)=2是一种创造性的、优雅的、高效的方法,Mark标识这两个要求都得到了满足。这是查询正常工作所必需的。这是错误的,因为eit返回1
,而没有的行(1236)
1234
存在,这就是它返回一个的原因。然后,重新阅读问题和标题:和
运算符对单个列(一列中两行之间的比较)否,他在一列中查找两行具有相同值(fld_tech_id
),在另一列中查找两个不同值(234和236)(fld\u tech\u category\u value\u id
)。检查2(或更多)行上的内容意味着SQL查询比使用从一个表中选择whatever;
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
) ;