我有一张像下面这样的桌子;
╔═════════╦══════╦═════╗
║ 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 ║
╚═════════╩══════╩═════╝
我有输入
mytable
,101
。我想要输出像;2,5
3,5
这意味着,在表中,它将查找组合
102
,并返回具有不同批号的完全相同的组合。除此之外,我还想避免重复行。这里101,102
和1111
有相同的标签,对应的批号与5555
s相同,所以我只想要一行而不是两行。尽管tag
有不同8888
s的标记101
和102
,但不能考虑将其列出,因为它还包括标记lot
。也就是说,我要的产品是精确的组合。简而言之,我不想要任何附加标签的产品,也不想要任何丢失标签的产品。我怎样才能做到这一点?
最佳答案
编辑:为更新的问题修改了答案
注意:查询未测试
SELECT GROUP_CONCAT(lot ORDER BY lot ASC SEPARATOR ',')
from mytable
having count(*) = 2
and GROUP_CONCAT(tag ORDER BY tag ASC SEPARATOR ' ') = '101 102'
group by product
旧答案
您可以使用group by来实现这一点。
select tag, product from mytable where tag in (101,102) group by tag, product
使用distinct也可以做到这一点,但是您已经研究过了。我不记得是否可以在多个列中使用distinct。我想这也行。。。
select distinct tag, product from mytable where tag in (101,102)
关于php - 如何根据列值组合检索唯一行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34871945/