Sql 如何选择不在表B中但在表A中的行(左连接)
我正在使用DB2开发一个应用程序 我有表products、price和cost,这些表以这种方式存储产品数据: 正如您所看到的,在本例中,产品可能有一个价格,但没有分配成本,因此该行不存在,这不像产品可以有成本=null 我想做的是获取产品的所有ID,这些ID分配给价格而不是成本,因此结果应该是: 我想我不能做外部的左或右连接,因为为了做到这一点,我需要两个表price和cost,以便在它们上面都有ID 我不太确定我使用的是什么版本的DB2,我预先配置了与DB2交互的软件,所以如果您使用SQL Server语法,它将对我有所帮助,因为它与DB2非常相似 谁能帮帮我吗 这是一个简单的左连接/其中: 您也可以使用not exists和not in,但我不建议在使用子查询时使用该选项。这是一个简单的左连接/where:Sql 如何选择不在表B中但在表A中的行(左连接),sql,db2,Sql,Db2,我正在使用DB2开发一个应用程序 我有表products、price和cost,这些表以这种方式存储产品数据: 正如您所看到的,在本例中,产品可能有一个价格,但没有分配成本,因此该行不存在,这不像产品可以有成本=null 我想做的是获取产品的所有ID,这些ID分配给价格而不是成本,因此结果应该是: 我想我不能做外部的左或右连接,因为为了做到这一点,我需要两个表price和cost,以便在它们上面都有ID 我不太确定我使用的是什么版本的DB2,我预先配置了与DB2交互的软件,所以如果您使用SQL
您也可以使用not exists和not in,但我不建议在使用子查询时使用。在这种情况下,您可以使用left join:
SELECT
select_list
FROM
T1
LEFT JOIN T2 ON
join_predicate;
带有where子句的示例:
SELECT Customers.CustomerName
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE Orders.CustomerID is null
有关的详细信息您可以在这种情况下使用左连接:
SELECT
select_list
FROM
T1
LEFT JOIN T2 ON
join_predicate;
带有where子句的示例:
SELECT Customers.CustomerName
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE Orders.CustomerID is null
有关的详细信息此情况是SQL中存在和不存在语句的原因:
它是不言自明的,在这种简单的情况下比其他解决方案更有效。这种情况就是SQL中存在和不存在语句的原因: 它是不言自明的,在这种简单的情况下比其他解决方案更有效。在DB2中,它应该是:
SELECT product.id
FROM product
INNER JOIN price ON product.id= price.fkProductID
WHERE NOT EXISTS (SELECT id FROM cost
WHERE cost.fkProductID = product.id)
在DB2中,它将是:
SELECT product.id
FROM product
INNER JOIN price ON product.id= price.fkProductID
WHERE NOT EXISTS (SELECT id FROM cost
WHERE cost.fkProductID = product.id)
这是一个好问题。您的问题已被正确编辑。这是清楚的。你举了一个例子。继续努力@Rodolfo Bocanegray你不是新来的。您不应将信息发布为图像,因为这会阻止其他人搜索信息,并阻止他们使用复制/粘贴来帮助研究/解决您的问题。此外,您的问题与sql server无关-已删除该标记。SQL Server和DB2使用不同的SQL方言-除了最简单的查询之外,尝试使用tsql只会使事情变得混乱。这是一个好问题。您的问题已被正确编辑。这是清楚的。你举了一个例子。继续努力@Rodolfo Bocanegray你不是新来的。您不应将信息发布为图像,因为这会阻止其他人搜索信息,并阻止他们使用复制/粘贴来帮助研究/解决您的问题。此外,您的问题与sql server无关-已删除该标记。SQLServer和DB2使用不同的SQL方言-除了最简单的查询之外,如果尝试使用tsql,您只会混淆事情。非常好。非常好用,非常好。工作完美。