使用sql从表中获取不可用值列表

Rub*_*uby 2 sql sql-server-2008

我在sql server 2008中有下表,有医院id和他们的部门:

HID    DEPT
5   neuro
2   derma
3   cardio
2   ent
1   neuro
5   optha
3   ent
3   optha
4   derma
1   optha
5   derma
Run Code Online (Sandbox Code Playgroud)

需要使用sql获取它没有的id和部门名称列表.例如:

HID   DEPT
 1    derma
 1    cardio
 1    ent
 2    cardio
 2    neuro
 2    optha
Run Code Online (Sandbox Code Playgroud)

等等谢谢

Lam*_*mak 6

试试这个:

;WITH CTE AS
(
    SELECT *
    FROM (  SELECT DISTINCT HID
            FROM YourTable) A
    CROSS JOIN (SELECT DISTINCT DEPT
                FROM YourTable) B
)
SELECT *
FROM CTE A
WHERE NOT EXISTS(SELECT 1 FROM YourTable
                 WHERE HID = A.HID AND DEPT = A.DEPT)
Run Code Online (Sandbox Code Playgroud)

这是一个带有演示的sqlfiddle.

  • @Ruby`EXISTS`验证返回了一些行,如果它是`SELECT 1`,`SELECT*`,`SELECT NULL`或`SELECT whatevercolumn`无关紧要.我发现`SELECT 1`让我更清楚我不想要那个`SELECT`的任何列,我只是检查存在 (2认同)