我有一张像下面这样的桌子;

╔═════════╦══════╦═════╗
║ 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   ║
╚═════════╩══════╩═════╝

我有输入mytable101。我想要输出像;
2,5
3,5

这意味着,在表中,它将查找组合102,并返回具有不同批号的完全相同的组合。除此之外,我还想避免重复行。这里101,1021111有相同的标签,对应的批号与5555s相同,所以我只想要一行而不是两行。尽管tag有不同8888s的标记101102,但不能考虑将其列出,因为它还包括标记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/

10-12 00:08
查看更多