鉴于存储在SQL数据库中的以下表
表人
id username phone
1 james 555-666-777
2 gabriel 666-555-777
3 Lucas 222-888-999
4 Marta 555-444-777
表room_booking
id person_id room time
1 2 A2 13:00
2 4 B5 09:00
3 1 C1 20:00
仅获取room_booking id number 2
我希望输出为:
输出表
id username phone
4 Marta 555-444-777
我知道INNER JOIN
可以完成这项工作,但我从room_booking
附带的表SELECT *
中获得了字段。
答案 0 :(得分:4)
正如其他人所说,答案是不包括不需要的列。既然你想要一个表中的所有列,而没有其他表中的列,那么解决方案是使用person。*
Select distinct p.*
from person p
Inner join room_booking r
On r.person_id = p.id
我包含了不同的内容,因为根据您的结构,您最终可能会有多人预订。
实现相同目标的替代语法......
/*using sub select*/
Select * from person where id in (select person_id from room_booking);
/*using cte, distinct and inner join*/
; pids as(select distinct person_id from room_booking)
Select person.*
from pids
Inner join person on person_id = id;
/*using cte and subquery with explicit column list */
; pids as(select person_id from room_booking)
Select id, username, phone
from person
Where id in (select person_id from pids)
答案 1 :(得分:2)
select
p.id,
p.username,
p.phone
from Person p
inner join room_booking rb
on p.id = rb.person_id
where rb.id = 2
或者您可以选择p.*
,但不应该在产品代码中执行此操作。
答案 2 :(得分:1)
如果在查询中使用星号,则只会包含所有字段。尝试仅选择您想要获得的字段:
SELECT person.id, username, phone
FROM person JOIN room_booking ON person.id = room_booking.person_id
WHERE room_booking.id = 2
答案 3 :(得分:1)
我知道INNER JOIN可以完成这项工作,但我从桌子上得到了字段 包括room_booking。
不要选择它们,你就不会得到它们:
select p.id ,p.username ,p.phone from Person p
inner join room_booking rb
on rb.person_id=p.id
答案 4 :(得分:1)
两者都返回相同的结果
======================1
SELECT C.CountryName,C.ZipCode,P.Population
FROM tbl_Country C, tbl_Population P
WHERE C.ID= P.ID
======================2
SELECT C.CountryName,C.ZipCode,P.Population
FROM tbl_Country C inner join tbl_Population P
on C.ID= P.ID