在单独的表中检查用户id的存在 - T-SQL

时间:2009-07-27 14:15:00

标签: sql join

我手上有一个真正的日常用品。我们有一个帐户注册页面,按顺序列出新的帐号。我们遇到的问题有两个问题。例如,我们已经拥有客户ID的客户注册了另一个客户ID。为了解决这个问题,我们在表单中添加了“当前客户ID”字段,以便他们输入当前的客户ID,唯一的问题是他们仍然被分配了客户ID。

第二个问题是我们的订单输入软件中的实际客户数据库与此数据库不匹配。

我们想要做的是选择并测试客户是否存在于订单输入软件数据库中。

数据如下所示:

注册表

name    | id | id2
-----------------------
Bill    | 1  | NULL
Jim     | 2  | NULL
Sue     | 3  | NULL
Bob     | 4  | NULL
Author  | 5  | NULL
Bill    | 6  | 1
Sue     | 7  | 3

OrderEntry表

name    | id
-----------------------
Bill    | 1 
Sue     | 3
Author  | 5 

查询结果

name    | id | id2  |id1 Exists | id2 Exists
---------------------------------------------
Bill    | 1  | NULL |Yes        | No
Jim     | 2  | NULL |No         | No
Sue     | 3  | NULL |Yes        | No
Bob     | 4  | NULL |No         | No
Author  | 5  | NULL |Yes        | No
Bill    | 6  | 1    |No         | Yes
Sue     | 7  | 3    |No         | Yes

2 个答案:

答案 0 :(得分:0)

SQL Server

SELECT  s.*,
        (
        SELECT  TOP 1 1
        FROM    orderEntry oe
        WHERE   oe.id = s.id
        ),
        (
        SELECT  TOP 1 1
        FROM    orderEntry oe
        WHERE   oe.id = s.id2
        )
FROM    signup s

MySQLPostgreSQL

SELECT  s.*,
        (
        SELECT  1
        FROM    orderEntry oe
        WHERE   oe.id = s.id
        LIMIT 1
        ),
        (
        SELECT  TOP 1 1
        FROM    orderEntry oe
        WHERE   oe.id = s.id2
        )
FROM    signup s

Oracle

SELECT  s.*,
        (
        SELECT  1
        FROM    orderEntry oe
        WHERE   oe.id = s.id
                AND rownum = 1
        ),
        (
        SELECT  1
        FROM    orderEntry oe
        WHERE   oe.id = s.id2
                AND rownum = 1
        )
FROM    signup s

如果行存在,则返回1,否则返回NULL

答案 1 :(得分:0)

我认为你正在寻找这样的东西。,因为你没有显示软件系统表我不确定,除非你在id2列上进行简单的空检查。如果只进行空检查,则不需要第二次连接。

SELECT
    S.Name,
    S.id, 
    S.id2,
    CASE OE.ID
    WHEN NULL THEN 'No'
    ELSE 'Yes'
    AS "ID1Exists",
    CASE OS.id
    WHEN NULL THEN 'No'
    ELSE 'Yes'
    AS "ID2Exists"
FROM Signup S
    LEFT OUTER JOIN OrderEntry OE
    ON (S.id = OE.Id)
    LEFT OUTER JOIN OrderSoftware OS
    ON (s.id2 = OS.id)

这将以您需要的方式返回结果集,如果ID 2的结果基于id2列中的null,您将使用此查询。

SELECT
    S.Name,
    S.id, 
    S.id2,
    CASE OE.ID
    WHEN NULL THEN 'No'
    ELSE 'Yes'
    AS "ID1Exists",
    CASE S.id2
    WHEN NULL THEN 'No'
    ELSE 'Yes'
    AS "ID2Exists"
FROM Signup S
    LEFT OUTER JOIN OrderEntry OE
    ON (S.id = OE.Id)