2015-01-01 140 views
1

我用UNION ALL選擇用於2代表的項目中選擇的項目,這似乎選擇第一表項ONLY: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 

瞭解這個任何建議??


我創建一個測試表,這是造成正如我所說,不顯示第二表的字段:

enter link description here

所以,如果我做的回聲$名稱,也不會說明了什麼

這是sqlfiddle測試:http://sqlfiddle.com/#!2/3a161/1/0

+2

'執行'UNION'後應用'LIMIT 0,5'。如果第一個表格返回的行數超過5行,那麼就會顯示出來。 – Barmar

+0

結果是3行,但只顯示一個,我注意到了一些事情,一旦測試了phpmyadmin,字段名稱顯示只有第一個表,第二個表不存在,我認爲這就是爲什麼如果我打印回顯到向他們展示,他們不存在 – Fred

+0

您可以製作一個sqlfiddle,而不是張貼我們無法調整的圖像嗎? – Barmar

回答

1

當你犯了一個聯盟,你會從所有的子查詢得到的行數據。但是一個列只能有一個列名,所以聯合中的列名取自第一個子查詢。

如果你想使它更清晰,你可以給一個別名,表明它可以是任何一列。

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 
0

與工會,從第一選擇列名使用對於其他選擇也是如此。 如果你需要從來自pseodo列添加到每個錶行要知道選擇:

SELECT 
    'table1' tablename, 
    fieldx 
FROM 
    table1 

UNION ALL 

SELECT 
    'table2', 
    fieldy 
FROM 
    table2 
+0

我對table1和tablename感到困惑,我不明白你的意思 – Fred

+0

這是'UNION'的列別名。 – Barmar

+0

所以在我的情況,只是爲了澄清,哪一個是table1,哪一個是tablename – Fred