mysql的四表查询_使用MySQL在四个表上进行SQL查询-‘intersection’

我有4张桌子

POST:

id

POST_TAG:

post_id

tag_id

value

TAG:

id

SEARCH:

tag_id

post_tag_value

我需要查询具有所有标签和值作为SEARCH表中的行的帖子(不仅仅是标签的一个相等值):

编辑:很抱歉没有提供当前查询和足够的信息.

SELECT POST.id FROM POST,POST_TAG, SEARCH

WHERE

POST.id = POST_TAG.post_id AND

POST_TAG.tag_id= SEARCH.tag_id AND

POST_TAG.value = SEARCH.value;

如果SEARCH表有一行,它将起作用.问题是,当它有更多时.结果应该更少,但实际上更多(如果用2行进行测试,则正确的结果是重复的行;我正在寻找交集而不是并集)

查询的结果为’1′,’1′,’2′.它应该仅是“ 1”,因为它同时具有两个“标签”,而“ 2”仅具有一个.

解决方法:

SELECT pt.post_id

FROM SEARCH s INNER JOIN post_tag pt ON pt.tag_id = s.tag_id AND pt.value = s.value

GROUP BY pt.post_id

HAVING COUNT(*) = (SELECT COUNT(*) FROM SEARCH)

请注意,在您的小提琴中,ID为0的帖子也应返回,因为它同时具有(0,’yes’)和(1,’yes’)元组.

标签:sql-match-all,sql,mysql

来源: https://codeday.me/bug/20191101/1981730.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值