SQL比较两个表与普通ID
由于存储在SQL数据库中的以下表SQL比较两个表与普通ID
表人
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
我想输出为:
输出t能够
id username phone
4 Marta 555-444-777
我知道INNER JOIN
可以做的工作,但我从包含SELECT *
表room_booking
领域。
正如其他人所说,答案是不包括不需要的列。既然你想都来自同一个表中,并没有与其他表中的列列的,该解决方案是使用的人。*
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)
如果您在查询中使用星号,则只会包含所有字段。尽量选择只想要得到的字段:
SELECT person.id, username, phone
FROM person JOIN room_booking ON person.id = room_booking.person_id
WHERE room_booking.id = 2
感谢您的帮助!良好的输入与最终的地方。我用过人。*,并根据jmoreno的建议改变了结构。 –
我知道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
感谢您的帮助! –
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.*
但你不应该这样做,在督促代码。
对于选择明星评论+1。没有任何东西比源表结构更改的选择星更快地分解代码。 :) – 2011-10-03 00:18:33
好的,谢谢你们关于p的输入。*我会记住,数据库不断增长。谢谢! –
都返回相同的结果
======================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
感谢您的详细解答!我终于改变了结构,并在查询中使用了子选择。感谢我不知道的独特暗示。 –