好的,我遇到了这种情况。 3个表格,标签,书籍和交叉表*。你又怎么处理这个?
tags
-id int
-name varchar
books
-id int
-name varchar
taggings
-tagId_fk int
-bookId_fk int
示例数据
tags id name 1 good 2 really good 3 bad 4 long 5 exciting books id name 1 Pumpkin Man 2 O-castic Bastard taggings bookId_fk tagId_fk 1 1 1 4 2 4 2 5
所以南瓜人已被标记为good
和long
,而 O-castic Bastard 已被标记为long
和exciting
。
我想写一个检索的查询:
books.id books.name taggings.tagId_fk as tags.name (know what I mean?) 1 Pumpkin Man good 1 Pumpkin Man long 2 O-castic Bastard long 2 O-castic Bastard exciting
不完全是我想要的
SELECT DISTINCT taggings.bookId_fk, tags.name FROM tags INNER JOIN taggings ON taggings.tagId_fk=tags.tagId ORDER BY taggings.bookId_fk;
我真正的问题是,甚至可以在没有:
的情况下在MySQL中显示上述结果答案 0 :(得分:2)
SELECT b.*,
t.name
FROM books b
INNER JOIN taggings t_b ON t_b.bookId_fk = b.id
INNER JOIN tags t ON t.id = t_b.tagId_fk
ORDER BY b.id
所以,是的,这是可能的。
注意:如果您的图书完全没有标记 - 在两种情况下都将INNER
更改为LEFT
,您将获得NULL
值那些书的标签。