我有三个表
table name: tags
id (int)
tag_name (vharchar)
table name: messages
id (int)
message_title (vharchar)
message_content(vharchar)
table name: message_tag
message_id (int)
tag_id (int)
我试过这段代码,但它没有用(返回空)
SELECT messages.message_title, messages.message_content, tags.tag_name
FROM messages
INNER JOIN message_tag ON messages.id = message_tag.message_id
INNER JOIN tags ON tags.id = message_tag.tag_id
WHERE message_tag.tag_id =191
AND message_tag.tag_id =19
AND message_tag.tag_id =31
ORDER BY RAND( )
LIMIT 20
我想随机选择 20 行连接到标签 191、19 和 31
最佳答案
SELECT messages.message_title, messages.message_content, tags.tag_name
FROM messages
INNER JOIN message_tag ON messages.id = message_tag.message_id
INNER JOIN tags ON tags.id = message_tag.tag_id
WHERE message_tag.tag_id IN (191, 19, 31)
ORDER BY RAND( )
LIMIT 20
使用 IN
而不是 AND
。这将为您带来至少链接到这些特定标签之一的消息。
更新:如果您想要获取所有 3 个标签都存在的消息,您可以改为这样做(假设您在 message_tag 中的行是唯一的):
SELECT messages.message_title, messages.message_content, tags.tag_name
FROM messages
INNER JOIN message_tag ON messages.id = message_tag.message_id
INNER JOIN tags ON tags.id = message_tag.tag_id
WHERE message_tag.tag_id IN (191, 19, 31)
GROUP BY messages.id
HAVING COUNT(messages.id) > 2
ORDER BY RAND( )
LIMIT 20
关于mysql - 在mysql中合并两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11762825/