[英]What join to use?
我有 2 個不同的表,它們只有一個具有相同名稱('用戶名')的字段。 他們彼此沒有關系。 我只需要對 select 進行一次查詢,其中的所有行都具有該字段等於給定值。
我想出了這個,這當然是錯誤的... SELECT * FROM user AS a FULL JOIN future_user AS b WHERE a.username=x OR b.username=x
這些我正在談論的表格:
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;
使用UNION
:
SELECT
fields
FROM
user
WHERE
user.username=x
UNION
SELECT
fields
FROM
future_user
WHERE
future_user.username=x
請注意,您不能在任何一個中執行SELECT *
,因為它們具有不同的字段。 您需要從兩個子查詢中返回相同的字段。
聽起來您正在尋找的是Full Outer Join 。 一些數據庫系統(尤其是 MySQL)不支持這種連接。 對於那些這樣做的人,您的查詢將類似於:
SELECT * FROM user FULL OUTER JOIN future_user
ON user.username = future_user.username;
對於那些不這樣做的人,您將不得不使用 LEFT JOIN 和 RIGHT JOIN 的 UNION,如上面鏈接的 Wikipedia 文章中所述,類似於(在 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;
您可能需要認真考慮是否有可用的替代方法,例如合並表或在后端處理來自兩個單獨查詢的結果集。 FULL OUTER JOIN 使用起來非常奇怪,您最終會得到一堆 NULL 字段值,您必須檢查和驗證這些字段值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.