首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用什么join?

问使用什么join?
EN

Stack Overflow用户
提问于 2011-05-31 04:54:49
回答 2查看 67关注 0票数 0

我有两个不同的表,其中只有一个字段具有相同的名称(‘用户名’)。他们没有血缘关系。我只需要一个查询来选择其中的所有行,这两个行的这个字段等于一个给定值。

我想出了这个,这是错误的.SELECT * FROM user AS a FULL JOIN future_user AS b WHERE a.username=x OR b.username=x

下面是我所说的表格:

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-31 04:59:31

使用UNION

代码语言:javascript
复制
SELECT
    fields
FROM
    user
WHERE
    user.username=x
UNION
SELECT
    fields
FROM
    future_user
WHERE
    future_user.username=x

请注意,您不能在其中执行SELECT *,因为它们具有不同的字段。您需要从这两个子查询中返回相同的字段。

票数 5
EN

Stack Overflow用户

发布于 2011-05-31 05:08:05

听起来你要找的是一个Full Outer Join。一些数据库系统(特别是MySQL)不支持这样的连接。对于那些这样做的人,您的查询将类似于:

代码语言:javascript
复制
SELECT * FROM user FULL OUTER JOIN future_user
  ON user.username = future_user.username;

对于那些没有这样做的人,你必须使用左连接和右连接的联合,就像上面链接的维基百科文章中所解释的那样,类似于(在MySQL中):

代码语言:javascript
复制
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;

您可能希望认真考虑是否有可用的替代方案,例如组合表或在后端处理来自两个单独查询的结果集。完整的外部连接使用起来非常奇怪,而且你最终会得到一堆空字段值,你必须检查和验证它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6180668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档