Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server匹配内部联接结果_Sql_Sql Server - Fatal编程技术网

SQL Server匹配内部联接结果

SQL Server匹配内部联接结果,sql,sql-server,Sql,Sql Server,我有一个家庭作业问题,上面写着: “列出每对价格相同的书籍的书籍代码。 (例如,其中一对是0200册和7559册,因为 两本书的价格都是$8.00。)除了两本书的代码,还包括价格。 列出的第一本书代码应该是主排序键,第二本书代码应该是主排序键 代码应该是次要排序键。“ 我的代码如下所示: USE Henry; SELECT DISTINCT BOOK1.BOOK_CODE, BOOK1.PRICE FROM BOOK AS BOOK1 JOIN BOOK AS BO

我有一个家庭作业问题,上面写着:
“列出每对价格相同的书籍的书籍代码。 (例如,其中一对是0200册和7559册,因为 两本书的价格都是$8.00。)除了两本书的代码,还包括价格。 列出的第一本书代码应该是主排序键,第二本书代码应该是主排序键 代码应该是次要排序键。“
我的代码如下所示:

   USE Henry;
SELECT DISTINCT BOOK1.BOOK_CODE, BOOK1.PRICE
FROM BOOK
    AS BOOK1
    JOIN BOOK
    AS BOOK2
    ON (BOOK1.BOOK_CODE = BOOK2.BOOK_CODE)
    AND (BOOK1.PRICE = BOOK2.PRICE)
WHERE BOOK1.PRICE = BOOK2.PRICE
ORDER BY BOOK1.PRICE, BOOK1.BOOK_CODE;

我不知道如何把价格匹配在一起,然后把它们列在一起。有人能帮我解决这个问题吗?

关于如何处理两本以上书籍价格匹配的情况,问题并不十分清楚。我猜您不想显示冗余信息:

SELECT  BOOK1.BOOK_CODE BOOK_CODE_1, BOOK2.BOOK_CODE BOOK_CODE_2, BOOK1.PRICE
FROM BOOK
AS BOOK1
JOIN BOOK
AS BOOK2
ON (BOOK1.BOOK_CODE < BOOK2.BOOK_CODE)
AND (BOOK1.PRICE = BOOK2.PRICE)
WHERE NOT EXISTS(  --This will remove some redundant info
  select * 
  from BOOK BOOK3 
  where BOOK3.BOOK_CODE<BOOK1.BOOK_CODE and BOOK3.PRICE=BOOK1.PRICE
  )
ORDER BY BOOK1.BOOK_CODE, BOOK2.BOOK_CODE;
选择BOOK1.BOOK\u code BOOK\u code\u 1、BOOK2.BOOK\u code BOOK\u code\u 2、BOOK1.PRICE
从书本上
作为第1册
加入书
作为第二册
打开(BOOK1.BOOK\u代码
“除了两个图书代码外,还包括价格。”

因此,您必须更改选择以显示这些字段

在您的代码中,您加入的是
BOOK1\u code=BOOK2\u code
,但这不正确,因为您正在寻找价格相同的不同书籍。您需要加入的是价格,如注释所示

简单的内部联接条件不足的问题在于,它会将BOOK1的价格与BOOK2的价格匹配,反之亦然-将BOOK2的价格与BOOK1的价格匹配。它也会按价格将同一本书与自身匹配。因此,同一对书将列出两次,而图书本身将按自身列出一次e

为了避免这种情况,您可以在BOOK1.Code不同于BOOK2.Code的内部联接上强制执行一个条件。我将使用BOOK1.Code,因为这样可以避免将相同的图书代码与自身匹配,并确保只比较较小的图书代码与较大的图书代码

USE Henry;
SELECT BOOK1.BOOK_CODE, BOOK2.BOOK_CODE, BOOK1.PRICE
FROM BOOK AS BOOK1
    INNER JOIN BOOK AS BOOK2
      ON  BOOK1.PRICE = BOOK2.PRICE    
      AND BOOK1.BOOK_CODE < BOOK2.BOOK_CODE --2nd ON condition 
                                            --eliminates repeats
ORDER BY BOOK1.BOOK_CODE, BOOK2.BOOK_CODE
使用Henry;
选择BOOK1.BOOK\u CODE、BOOK2.BOOK\u CODE、BOOK1.PRICE
从第一册开始
内部连接书作为BOOK2
关于BOOK1.PRICE=BOOK2.PRICE
和BOOK1.BOOK_代码

编辑:你也不需要区分。

提示:关于
条件应该只基于价格。Gordan击败了我!祝你的家庭作业@ReadingIshard好运,你可以使用价格上的自连接来完成这项工作。尽管这是一个有问题的方法,因为如果有多个匹配项,它会爆炸。要做到这一点,你可以连接到图书代码不匹配的价格派生表,然后选择top 1/使用行号()如果窗口功能可用。感谢您的帮助。我已将on条件更改为仅基于价格。结果仍然显示价格不相同的项目。我的where语句是否不是应该的方式?是否需要添加GROUP BY语句以使其仅显示匹配的价格?@GordonLinoff您的意思是e JOIN现在实际上只基于价格?谢谢@Zorkolot。这非常有效。我能够将此代码改编为另一个类似的家庭作业问题,而且也很有效。你也帮我理解了一点问题。我误读了它。