2013-07-23 2 views
1

Я хочу выбрать названия и даты из всех документов, которые упоминают «Африка». У меня есть две таблицы:Синтаксис Mysql для выбора данных по двум таблицам?

mentioned_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 | 

Я знаю, что могу найти имя файла, а затем найдите название и дату, но я 'd хотел бы сделать все это в одном запросе. Например, я могу сделать это (не реальный код, это действительно грубая):

SELECT in_document FROM mentioned_places WHERE name="$mentionedPlace"; 

, а затем

SELECT DISTINCT title, date FROM documents WHERE filename IN ($listOfFilenames); 

... но я хотел бы быть в состоянии сделать это все в одном запрос. Есть ли способ сделать это?

ответ

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 демо

+0

Вместо 'GROUP BY d.title, d.date' просто использовать 'DISTINCT' ?? :) – hims056

+0

Я не думаю, что он был груб. RTFM не является грубым как таковым. Он даже привел вам соответствующий раздел :) –

+1

@ hims056 Я не был. Мне жаль, что вы так себя чувствовали. Позвольте мне исправить это и перефразировать. – peterm

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' 
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); 
1

Просто используйте "JOIN"

SELECT mentioned_places.name, documents.title, documents.date FROM mentioned_places join documents ON mentioned_places.in_document=documents.filename; 
Смежные вопросы