我使用UNION ALL为2个表选择项目,似乎只选择第一个表项:
SELECT id_shk,
shk_fname,
shk_lname,
shk_tran,
country_code,
nationality,
shk_info,
shk_title
FROM sheikh_tbl
WHERE ( quoran = "1"
OR baramijaudio = "1"
OR anachid = "1"
OR douaedikr = "1"
OR dorousse = "1" )
AND ( shk_fname LIKE "%oyoun%"
OR shk_mname LIKE "%oyoun%"
OR shk_lname LIKE "%oyoun%" )
UNION ALL
SELECT wtitle,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
FROM wall
WHERE wtitle LIKE "%oyoun%"
LIMIT
0, 5
有关于此的任何建议吗?
我创建了一个测试表,这是我说的结果,第二个表的字段没有显示:
因此,如果我回复$ name,它将不会显示任何内容
这是在sqlfiddle中的测试:http://sqlfiddle.com/#!2/3a161/1/0
答案 0 :(得分:1)
当您建立联合时,您将从所有子查询中获取行数据。但是一列只能有一个列名,因此union中列的名称取自第一个子查询。
如果您想更清楚,可以给出一个别名,表明它可以是列。
select id_shk AS id_shk_or_wtitle,
shk_fname,
shk_lname,
shk_tran,
country_code,
nationality,
shk_info,
shk_title
FROM sheikh_tbl
UNION
SELECT wtitle,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
FROM wall
答案 1 :(得分:0)
使用union,第一个select中的列名也用于其他select。 如果您需要知道表行的来源,请为每个选择添加一个pseodo列:
SELECT
'table1' tablename,
fieldx
FROM
table1
UNION ALL
SELECT
'table2',
fieldy
FROM
table2