php – MySQL查询根据特定标记组合在获取行时返回不需要的行
发布时间:2020-12-13 16:59:13 所属栏目:PHP教程 来源:网络整理
导读:我在 Windows 8 PC中运行 PHP MySQL.我有一张像下面的表格; ╔═════════╦══════╦═════╗║ product ║ tag ║ lot ║╠═════════╬══════╬═════╣║ 1111 ║ 101 ║ 2 ║ ║ 1111 ║ 102 ║ 5 ║ ║ 2222 ║ 103
我在
Windows 8 PC中运行
PHP MySQL.我有一张像下面的表格;
╔═════════╦══════╦═════╗ ║ product ║ tag ║ lot ║ ╠═════════╬══════╬═════╣ ║ 1111 ║ 101 ║ 2 ║ ║ 1111 ║ 102 ║ 5 ║ ║ 2222 ║ 103 ║ 6 ║ ║ 3333 ║ 104 ║ 2 ║ ║ 4444 ║ 101 ║ 2 ║ ║ 5555 ║ 101 ║ 2 ║ ║ 5555 ║ 102 ║ 5 ║ ║ 6666 ║ 102 ║ 2 ║ ║ 6666 ║ 103 ║ 5 ║ ║ 7777 ║ 101 ║ 2 ║ ║ 7777 ║ 102 ║ 5 ║ ║ 7777 ║ 103 ║ 6 ║ ║ 8888 ║ 101 ║ 1 ║ ║ 8888 ║ 102 ║ 3 ║ ║ 8888 ║ 103 ║ 5 ║ ║ 9999 ║ 101 ║ 6 ║ ║ 9999 ║ 102 ║ 8 ║ ╚═════════╩══════╩═════╝ 我有输入101,102.我希望输出像; 2,5 6,8 查询将查找组合101,102,并返回具有不同批号的完全相同的组合.除此之外,我想避免重复的行.这里1111和5555具有相同的标签,相同的批号与标签相同(具有相同批次的完全相同的组合),所以我只想要一行而不是两行.即使8888具有不同批次的标签101和102,也不能考虑列表,因为它还包括标签103.简而言之,我想要的产品具有精确的101,102组合,而且我不想要带有任何额外标签的产品,而且我不想要任何缺少标签的东西. 我有一个像下面的查询; SELECT DISTINCT GROUP_CONCAT(m.lot) FROM mytable m WHERE m.tag IN (101,102) AND (SELECT COUNT(m.product) FROM mytable m2 WHERE m.product = m2.product)>1 GROUP BY m.product; 返回; 2,5 2 5,2 1,3 6,8 我怎样才能解决这个问题?有没有更好的方法来完成我正在寻找的东西? 这是从http://sqlfiddle.com/#!9/d11d6开始的小提琴 解决方法
我建议使用简单连接:
SELECT DISTINCT a.lot,b.lot FROM mytable a INNER JOIN mytable b ON b.product = a.product AND NOT EXISTS (SELECT * FROM product WHERE tag NOT IN (a.tag,b.tag)) WHERE a.tag = 101 and b.tag = 102 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |