2017-07-27 30 views
1

我有3個表;3個表上的SQL查詢,一個具有不同的列名

項目,活動,客戶。

我需要返回searchterm匹配的所有3個表的結果。不過,我需要在項目和廣告系列表中檢查「名稱」列,但需要在客戶表中的「說明」列中進行檢查。 NB這是一個現有的客戶端數據庫,我沒有權限更改列名稱。

舉例: '數據' 用戶搜索,我需要選擇:

name as title FROM projects WHERE name LIKE %data%, 

name as title FROM campaigns WHERE name LIKE %data% 

description as title FROM clients WHERE description LIKE %data% 

我掙扎的查詢組合。下面是我到目前爲止,它返回一個語法錯誤。我也在想我可能會採取錯誤的做法。

SELECT 
    p.name, 
    c.name, 
    cl.description AS title 
FROM 
    projects, 
    campaigns, 
    clients 
WHERE 
    p.name LIKE % DATA % 
OR c.name LIKE % DATA % 
OR cl.description LIKE % DATA % 
+0

檢查此答案:https://stackoverflow.com/questions/45327255/search-multiple-tables-for-the-same-value-and-get-table-where-result-it-comes-fr/45327692 #45327692 –

+0

可能重複[搜索多個表的相同的值,並得到表結果它來自](https://stackoverflow.com/questions/45327255/search-multiple-tables-for-the-same-value-並得到表,其中結果它來fr) –

+0

檢查給出的解決方案鏈接 –

回答

3

您正在尋找union all

SELECT name as title FROM projects WHERE name LIKE %data%, 
UNION ALL 
SELECT name as title FROM campaigns WHERE name LIKE %data% 
UNION ALL 
SELECT description as title FROM clients WHERE description LIKE %data%; 

如果要刪除重複項,然後使用UNION代替UNION ALL

+0

謝謝 - 重複意味着將返回的實際結果在兩個或多個表中是相同的? – DJC

+0

@CIvemy。 。 。如果你想確保'name'不在結果集中重複,那麼使用'union'。如果你知道沒有重複或者你想要它們,那麼使用'union all'。 –

相關問題