Я искал ответ весь день, и я просто не могу его взломать. У меня есть три таблицы:Получить ключи из одной таблицы и значения из другого 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
, но я, похоже, не имел никакого успеха в этом (возможно, потому что это кажется мне довольно запутанным на данный момент).
Так что мой вопрос: Могу ли я вернуть список ключей со значениями (если они существуют в другой таблице и соответствуют определенным критериям)?