选择数据是否同时存在于两个表或一个表中

时间:2019-01-18 11:50:46

标签: sql join inner-join

我正在使用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 :(得分:0)

如果您的标准是显示任何表中是否存在结果,则需要使用完全外部联接。

此外,如果在完全外部联接上使用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%`'

答案 1 :(得分:0)

对于您而言,最好使用 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%'