如何在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个表但不重复?的主要内容,如果未能解决你的问题,请参考以下文章