我在 Windows 8 PC 上运行 PHP+MySQL。我有一张桌子mytable
像下面这样;
╔═════════╦══════╦═════╗
║ 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
,并返回完全相同的组合 with 不同批号。除此之外,我想避免重复的行。这里1111
and 5555
具有相同的标签和相同的对应批号tag
s(相同批次的完全相同的组合),所以我只想要一行而不是两行。虽然,8888
主题标签101
and 102
与不同的lot
s,它不能被考虑列出,因为它包含标签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 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)