2015-01-30 3 views
-1

Я искал ответ весь день, и я просто не могу его взломать. У меня есть три таблицы:Получить ключи из одной таблицы и значения из другого mysql

Keys 
------------------- 
| ID | name  | 
------------------- 
| 1 | title  | 
------------------- 
| 2 | text  | 
------------------- 

Первая таблица содержит список ключей, содержащих страницу.

Values 
--------------------------------- 
| ID | value  | key | page | 
--------------------------------- 
| 1 | 'My title' | 1 | 1 | 
--------------------------------- 
| 2 | 'Content' | 2 | 1 | 
--------------------------------- 
| 1 | 'MyTitle2' | 1 | 2 | 
--------------------------------- 

Второй представляет собой список значений для ключей, связанных с странице они находятся на

Pages 
-------------------- 
| ID | name  | 
-------------------- 
| 1 | 'A page' | 
-------------------- 
| 2 | 'Another' | 
-------------------- 

третий список страниц, чтобы связать их все вместе.

Когда я запрашиваю страницу, я хочу вернуть все ключи, независимо от значений, существующих в приведенных выше таблицах. Но я хочу вернуть значения для столбцов, где они существуют.

Я попробовал пару вещей, но ни один из них не кажется, вернуть мне гарантированный полный список ключей с потенциальными значениями заполненными.

Первое, что я попытался было вернуть все ключи, которые являются либо правильными или NOT NULL, как таковые:

SELECT 
    * 
FROM Keys k 
LEFT JOIN Values v 
ON k.id = v.key 
WHERE (v.page = 1 
OR v.page IS NULL) 

Здесь я хочу

1. Get all keys 
2. Left Join them with values 
3. Filter out the keys that don't belong to this page 

Однако, когда есть данные в массиве Values ​​левых присоединиться присоединятся независимо от вола e id, а затем отфильтруйте несоответствия, оставив мне нет совпадений. Я хочу, чтобы он возвращал мне пустые ключи.

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

Так что мой вопрос: Могу ли я вернуть список ключей со значениями (если они существуют в другой таблице и соответствуют определенным критериям)?

ответ

0

Спасибо переполнения стека, как и набрав в вопросе привел меня переформулировав и придумывает результат (он меня в тупик в течение нескольких дней):

SELECT 
     * 
FROM Keys k 
LEFT JOIN 
(SELECT * FROM Values v2 WHERE v2.page = 1) as v 
ON k.id = v.key 

Видимо, вы можете LEFT JOIN любого (из-за отсутствие лучшего слова и больше знаний для его описания) «массив» результатов, как будто он сам является таблицей, поэтому вы можете условно выбрать значения. Если они не существуют, левое объединение возвращает пустые результаты, но ключи все равно возвращаются как есть.

Смежные вопросы