SQL比较两个具有公共ID的表

时间:2011-10-02 22:32:10

标签: sql compare

鉴于存储在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 *中获得了字段。

5 个答案:

答案 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