2
我有三个MySQL表格 - 文档,文档标签和多对多关系表(带有文档ID和标签ID)。多对多标签有条件选择
Document
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
DocumentToTag
+------+------+
|idDoc |idTag |
+------+------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
| 4 | 4 |
+------+------+
Tag
+------+-------+
| id | value |
+------+-------+
| 1 | 2 |
| 2 | 4 |
| 3 | 8 |
| 4 | 42 |
+------+-------+
有必要使用具有特定值的2(或更多)标签获取文档。我们用下面的连接查询:
SELECT DISTINCTROW
Document.id
FROM Document
LEFT JOIN DocumentToTag AS dt1 ON dt1.idDoc = Document.id
LEFT JOIN Tag AS tag1 ON dt1.idTag = tag1.id
LEFT JOIN DocumentToTag AS dt2 ON dt2.idDoc = Document.id
LEFT JOIN Tag AS tag2 ON dt2.idTag = tag2.id
WHERE tag1.value = 'someTagValue'
AND tag2.value = 'someOtherTagValue'
在这种情况下,我们需要做的很多连接,我们需要在条件添加尽可能多的标签。所以他们的查询应该由一些脚本动态地创建。有没有更优雅的方式来处理它?
+1外部联接的有效转变成一个内由where子句加入。 – 2013-04-24 10:29:53
@MarkBannister是的,当然,它只是复制/粘贴:) – 2013-04-24 10:31:04
@HamletHakobyan非常感谢您的快速响应! – zavg 2013-04-24 10:41:02