2011-05-30 20 views
0

我有兩個不同的表,其中只有一個字段具有相同的名稱('用戶名')。他們不相關。我只需要一個查詢來選擇它們中的所有行,它們都具有與給定值相等的字段。什麼加入使用?

我想出了這一點,這是偏離航向錯誤的... SELECT * FROM用戶AS AS B,其中a.username = x或b.username = X

這些表我一個FULL JOIN future_user在說:

CREATE TABLE user 
(
uid  mediumint(6) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, 

username varchar(15) NOT NULL, 
password varchar(15) BINARY NOT NULL, 
mail  varchar(50) NOT NULL, 

name  varchar(50) NOT NULL, 
surname varchar(50) NOT NULL, 
birth char(10) NOT NULL, 
sex  tinyint(1) unsigned NOT NULL default 1, 

address varchar(50) NOT NULL, 
city  varchar(50) NOT NULL, 
zip  char(5) NOT NULL, 
province varchar(50) NOT NULL, 
country tinyint(3) NOT NULL, 

number1 varchar(50) NOT NULL, 
number2 varchar(50) NOT NULL, 

last_login TIMESTAMP,  
registered TIMESTAMP, 
online  tinyint(1) unsigned default 0, 

admin   tinyint(1) unsigned default 0, 
comment_allowed tinyint(1) unsigned default 0, 
post_allowed tinyint(1) unsigned default 0 

) ENGINE=InnoDB; 

CREATE TABLE future_user 
(
username varchar(15) NOT NULL, 
password varchar(15) BINARY NOT NULL, 
mail  varchar(50) NOT NULL, 

name  varchar(50) NOT NULL, 
surname varchar(50) NOT NULL, 
birth char(8) NOT NULL, 
sex  tinyint(1) unsigned NOT NULL, 

address varchar(50) NOT NULL, 
city  varchar(50) NOT NULL, 
zip  char(10) NOT NULL, 
province varchar(50) NOT NULL, 
country varchar(50) NOT NULL, 

number1 varchar(50) NOT NULL, 
number2 varchar(50) NOT NULL, 

code  char(10) NOT NULL 

) ENGINE=InnoDB; 

回答

5

使用UNION

SELECT 
    fields 
FROM 
    user 
WHERE 
    user.username=x 
UNION 
SELECT 
    fields 
FROM 
    future_user 
WHERE 
    future_user.username=x 

請注意,你不能或者是因爲他們有差異做SELECT *不同的領域。您需要從兩個子查詢中返回相同的字段。

+1

如果您希望僅在一個子查詢中包含一個字段,可以在其他子查詢中用NULL填充:'select username,mail,uid from user UNION select username,mail,NULL from future_user' – krubo 2011-05-30 22:03:38

0

這聽起來像你在找什麼是Full Outer Join。一些數據庫系統(特別是MySQL)不支持這種連接。對於那些做,你的查詢將是這樣的:

SELECT * FROM user FULL OUTER JOIN future_user 
    ON user.username = future_user.username; 

對於那些不這樣做,你將不得不使用LEFT的UNION連接和右維基百科的文章上面鏈接,事中加入成爲解釋像(在MySQL):

SELECT * FROM user LEFT JOIN future_user 
    ON user.username = future_user.username 
UNION 
SELECT * FROM user RIGHT JOIN future_user 
    ON user.username = future_user.username; 

您可能要嚴重的考慮,如果有另一種可用的,比如從兩個單獨的查詢在後端結合表或處理結果集。完整的外部連接非常奇怪,你最終會得到一堆你需要檢查和驗證的NULL字段值。