выберите данные, если они есть в обеих таблицах или в одной из таблиц - PullRequest
0 голосов
/ 18 января 2019

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

Это мой sql.

SELECT * FROM history_search 
INNER JOIN history_subs ON history_search.keyword = history_subs.keyword 
WHERE history_search.keyword LIKE '%$keyword%' OR history_subs.keyword LIKE '%$keyword%`'

history_subs

id, keyword, illegal, whitelist (1, Spotify.com, (Artists, api, community, investors, support, labs), open)

history_search

id, keyword, result, blacklist (1, meristone.com, 20, 0), (2, spotify.com, 19, 2),(3, cjrtec.com, 10, 1)

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

Надеюсь, вы мне поможете.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

В вашем случае было бы лучше использовать union

SELECT * FROM history_search 
right JOIN history_subs ON history_search.keyword = history_subs.keyword 
WHERE history_search.keyword LIKE '%$keyword%' OR history_subs.keyword LIKE 
'%$keyword%'
union 
SELECT * FROM history_search 
left JOIN history_subs ON history_search.keyword = history_subs.keyword 
WHERE history_search.keyword LIKE '%$keyword%' OR history_subs.keyword LIKE '%$keyword%'
0 голосов
/ 18 января 2019

Вам нужно использовать полное внешнее объединение, если ваши критерии должны показать результат, если он существует в любой из таблиц.

Более того, если вы используете условие where при полном внешнем соединении, ваш запрос будет неявно преобразован во внутреннее соединение

итак, итоговый запрос,

РЕДАКТИРОВАТЬ: Очевидно, полное внешнее соединение не поддерживается в MySql. Вот альтернативный подход к полному внешнему соединению

SELECT 
  * 
FROM history_search 
LEFT JOIN history_subs 
  ON history_search.keyword = history_subs.keyword AND history_search.keyword LIKE '%$keyword%'
UNION
SELECT 
  *
FROM history_subs
LEFT JOIN history_search
  ON history_search.keyword = history_subs.keyword AND history_subs.keyword LIKE '%$keyword%`'
...