在 SQL 中加入列表数据
Listing data with join in SQL
我有以下关于在 SQL 中连接表格的问题:
列出 13.05.2003
上所有未售出的 products
。考虑到表 Orders
、LineItem
和 Product
。
我的编码如下:
SELECT p.Pid, p.Label
from Product p natural join line_item l
natural join Orders
where Date <> "2003-05-13"
问题是,当我执行这段代码时,它看起来应该是更多的数据,我不确定如何使用 join
.
删除重复项
提前致谢
使用NOT EXISTS
更安全。例如:
select *
from product p
where not exists (
select null
from lineitem i
join orders o on o.oid = l.oid and l.pid = p.pid
where date <> "2003-05-13"
)
或者您可以使用 NOT IN
:
select *
from product
where pid not in (
select l.pid
from lineitem i
join orders o on o.oid = l.oid
where date <> "2003-05-13"
)
最后我尝试了以下方法并且有效:
select product.pid, product.label
from ((product inner join line_item on product.pid = line_item.pid) inner join orders on orders.oid = line_item.oid)
where not orders.date ='2003-05-13'
group by product.pid;
非常感谢您的回答,他们帮助我找到了解决问题的正确途径
我有以下关于在 SQL 中连接表格的问题:
列出 13.05.2003
上所有未售出的 products
。考虑到表 Orders
、LineItem
和 Product
。
我的编码如下:
SELECT p.Pid, p.Label
from Product p natural join line_item l
natural join Orders
where Date <> "2003-05-13"
问题是,当我执行这段代码时,它看起来应该是更多的数据,我不确定如何使用 join
.
提前致谢
使用NOT EXISTS
更安全。例如:
select *
from product p
where not exists (
select null
from lineitem i
join orders o on o.oid = l.oid and l.pid = p.pid
where date <> "2003-05-13"
)
或者您可以使用 NOT IN
:
select *
from product
where pid not in (
select l.pid
from lineitem i
join orders o on o.oid = l.oid
where date <> "2003-05-13"
)
最后我尝试了以下方法并且有效:
select product.pid, product.label
from ((product inner join line_item on product.pid = line_item.pid) inner join orders on orders.oid = line_item.oid)
where not orders.date ='2003-05-13'
group by product.pid;
非常感谢您的回答,他们帮助我找到了解决问题的正确途径