我想从提及“非洲”的所有文件中选择标题和日期。我有两张桌子:
提及_places表:
| name | in_document |
------------------------
| Africa | 10001.xml |
| Africa | 10002.xml |
文件表:
| filename | title | date |
----------------------------------
| 10001.xml | Foo | 2013-01-01 |
| 10002.xml | Bar | 2013-01-02 |
我知道我可以先查找文件名,然后查找标题和日期,但我想在一个查询中完成所有操作。例如,我可以这样做(不是真正的代码;它非常粗糙):
SELECT in_document FROM mentioned_places WHERE name="$mentionedPlace";
然后
SELECT DISTINCT title, date FROM documents WHERE filename IN ($listOfFilenames);
...但我希望能够在一个查询中完成所有操作。有没有办法做到这一点?
答案 0 :(得分:2)
尝试
SELECT d.title, d.date
FROM documents d JOIN mentioned_places p
ON d.filename = p.in_document
WHERE p.name = 'Africa'
GROUP BY d.title, d.date
或
SELECT DISTINCT d.title, d.date
FROM documents d JOIN mentioned_places p
ON d.filename = p.in_document
WHERE p.name = 'Africa'
这是 SQLFiddle 演示
答案 1 :(得分:1)
SELECT DISTINCT d.title, d.date FROM documents AS d JOIN mentioned_places AS m ON m.in_document = d.filename WHERE m.name = '$mentionedPlace'
答案 2 :(得分:1)
只需使用“加入”
SELECT mentioned_places.name, documents.title, documents.date FROM mentioned_places join documents ON mentioned_places.in_document=documents.filename;
答案 3 :(得分:0)
尝试做这样的事情:
SELECT p.in_document, d.title, d.date
FROM mentioned_pleaces p join documents d
ON p.in_document = d.filename
WHERE p.name = "$mentionedPlace" AND d.filename IN ($listOfFilenames);