2017-07-27 78 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'。 –

相关问题