我手上有一个真正的日常用品。我们有一个帐户注册页面,按顺序列出新的帐号。我们遇到的问题有两个问题。例如,我们已经拥有客户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
答案 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
在MySQL
和PostgreSQL
:
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)