外加或不加入

时间:2014-02-12 10:43:14

标签: sql sql-server-2008-r2

需要一点帮助解决问题。如果这是含糊的,这就是为什么我需要帮助的道歉。显示所有从未销售过的图书的标题ID,标题,发布商ID,发布商名称和条款。这意味着销售表中没有记录。对SALES表使用OUTER JOIN或NOT IN。在这种情况下,这些术语指的是涉及金钱的标题表上的项目。 (价格,预付款,版税)。

我提出了以下代码,并且没有返回任何记录。我查看了表格,不应该返回任何记录。基于使用OuterJoin或NOT IN,我不确定我的代码是否正确。谢谢!

SELECT titles.title_id, 
       titles.title, 
       publishers.pub_id, 
       sales.payterms,   
       titles.price, 
       titles.advance, 
       titles.royalty
  FROM publishers 
       INNER JOIN titles 
                  ON publishers.pub_id = titles.pub_id 
       INNER JOIN sales 
                  ON titles.title_id   = sales.title_id
 WHERE (sales.qty = 0)

3 个答案:

答案 0 :(得分:1)

好吧,您正在使用INNER JOIN,因此它只返回与您想要的连接条件匹配的记录。您应该使用LEFT OUTER JOIN(或LEFT JOIN)并检查sales方是否为空(表示没有匹配的记录)。

SELECT     titles.title_id, titles.title, publishers.pub_id, sales.payterms,   
           titles.price, titles.advance, titles.royalty

FROM       publishers INNER JOIN
           titles ON publishers.pub_id = titles.pub_id LEFT OUTER JOIN
           sales ON titles.title_id = sales.title_id
WHERE     sales.title_id IS NULL

答案 1 :(得分:1)

我相信您只需要将销售表的INNER JOIN更改为LEFT JOIN即可。然后检查sales表中任何列的NULL

SELECT     titles.title_id, titles.title, publishers.pub_id, sales.payterms,   
           titles.price, titles.advance, titles.royalty

FROM       publishers INNER JOIN
           titles ON publishers.pub_id = titles.pub_id LEFT JOIN
           sales ON titles.title_id = sales.title_id
WHERE     sales.qty IS NULL

答案 2 :(得分:0)

IS NULL表示数据库中不存在数据值。只需将INNER JOIN更改为LEFT JOIN即可。 用这个..

SELECT titles.title_id, 
   titles.title, 
   publishers.pub_id, 
   sales.payterms,   
   titles.price, 
   titles.advance, 
   titles.royalty
FROM publishers 
   INNER JOIN titles 
              ON publishers.pub_id = titles.pub_id 
   LEFT JOIN sales 
              ON titles.title_id   = sales.title_id
WHERE     (sales.qty IS NULL)