2017-08-04 91 views
0

我正尝试使用多个表创建搜索表单。带有“*”的SQL“AS”语句

我的问题在于“名称AS名称,*”部分,它不会使用名称作为名称,并且同时在表中查找所有内容。

这是我的SQL查询:

SELECT name AS name, * FROM files_plus WHERE name LIKE '%$query%' 
    UNION ALL 
    SELECT username AS name FROM users WHERE username LIKE '%$query%' 
    LIMIT 5 
+0

也没有sql标准允许在选择表达式显式列后使用'*' – cowbert

+0

即使我键入cloumn名称,它不会工作,因为我使用AS语句。 –

+0

尝试使用表格名称进行限定:'files_plus.name,files_plus。*',因为连接允许使用该语法(从t1连接t2开始选择t1。*,t2.col) – cowbert

回答

0

“SELECT名作为名称” 相同 “选择的名字从......”。其次,“SELECT name ...”是“SELECT * FROM ...”的一部分。写像“SELECT * FROM ...”,你就能毫不费力地检索您的信息

+0

我试过了,我发现它很奇怪,但它也不起作用。 –

0

你需要先工会的名字,然后做一个LEFT JOINfiles_plus得到其他列:

SELECT * FROM 
(SELECT name AS name FROM files_plus WHERE name LIKE '%$query%' 
    UNION ALL 
    SELECT username AS name FROM users WHERE username LIKE '%$query%') 
AS names 
LEFT JOIN files_plus ON names.name = files_plus.name 

您将拥有一个name的重复列,但您应该在原始查询中拥有该列。

+0

这有点有用,除非它不显示来自第二个表(用户)的名称。 –

+0

你的名字有重叠吗?如果是这样,你需要一个额外的列来确定来源。 –