如何在sql中选择2个表但不重复?

Posted

技术标签:

【中文标题】如何在sql中选择2个表但不重复?【英文标题】:how to select 2 tables in sql but no repeating? 【发布时间】:2017-03-27 19:59:23 【问题描述】:

我只想选择其中 table1.id=1 的两个表 我有 2 张桌子 表1:汽车。 表 2:所有者 表 1 不包含所有信息 所以我想在一列中获取所有信息。我的意思是我需要主人电话

我喜欢这样,但我得到了所有的专栏。怎么添加id?

drop table cars;
drop table owners;
CREATE TABLE cars(id INTEGER(11) PRIMARY KEY AUTO_INCREMENT, model TEXT,          price TEXT, name TEXT);
create table owners(
id INTEGER(11) PRIMARY KEY AUTO_INCREMENT,
phone varchar(25),
name varchar(25),
constraint owners_fk foreign key(id) references carss(id)
);

insert into cars(model , price, name )values('bmw', '10.000', 'thomas');
insert into cars(model , price, name )values('fiat', '5.000', 'none');
insert into owners(phone , name)values( '0333333','thomas');
insert into owners(phone , name)values('04444444','Tom');


SELECT * FROM cars
LEFT JOIN owners ON cars.name = owners.name
UNION ALL
SELECT * FROM cars
RIGHT JOIN owners ON cars.name = owners.name;

将选择 2 个表,但如何仅选择完整联合的一列以在一列中获取所有信息? 我用mysql

左连接是可以的,但我不重复名称: show picture of result

如果我只使用左连接:

SELECT * FROM cars
LEFT JOIN owners ON cars.name = owners.name where name='thomas';

【问题讨论】:

删除ALL? UNION 删除重复项。 使用您正在使用的数据库进行标记。 您使用的是哪个数据库? @GurV 我用mysql 【参考方案1】:

我假设您使用的是 MySQL,它不支持 full outer join。正确的做法是编译所有名字的列表,然后使用left join

select n.name, o.id, o.phone, c.model, c.price
from (select name from owners union select name from cars) n left join
     owners o
     on o.name = n.name left join
     cars c
     on c.name = n.name;

【讨论】:

嗨@Gordon Linoff,但如果我有很多名字,我将需要更多时间来像你的代码一样输入!!! 现在我得到了一个不错的结果:'' SELECT * FROM cars LEFT JOIN owner ON cars.name = owner.name where name='thomas';但名称(字段)不应重复字段 double ' @Json 。 . .只需在SELECT 中列出您想要的列。

以上是关于如何在sql中选择2个表但不重复?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 尝试外部连接表但不工作

SQL 服务器。从2个表中选择数据[重复]

SQL查询存在A表但不存在B表的数据

SQL查询存在A表但不存在B表的数据

Pandas to_sql 创建表但不插入数据

如何从Oracle SQL中的2个表中提取每个ID的最新记录[重复]