用于跨两个表选择数据的Mysql语法?

时间:2013-07-23 10:19:01

标签: mysql

我想从提及“非洲”的所有文件中选择标题和日期。我有两张桌子:

提及_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); 

...但我希望能够在一个查询中完成所有操作。有没有办法做到这一点?

4 个答案:

答案 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);