SQL 服务器 - 在不使用 UNION 子句的情况下从单独的表中检索数据
SQL Server - Retrieve data from separate tables without using UNION clause
我有一个问题,不确定是否有可能的解决方案,但仍然想在这个论坛上提出这个问题,因为这里有一些大师可能会提供一些解决方案:)
我有两个表 - EMAIL_Request 和 SMS_Request。下面提供了示例数据模型。
Email_Request
Seq Cust_ID Email_ID Sent
1 123 test@gmail.com Yes
2 234 abc@gmail.com No
SMS_Request
Seq Cust_ID MobileNo Sent
1 345 1234567890 Yes
2 456 2345678900 Error
举报
我必须在一个带有模式的报告中显示两个表的输出。预期报告样本。
Mode Cust_Id Sent_To Sent
EMAIL 123 test@gmail.com Yes
EMAIL 234 abc@gmail.com No
SMS 345 1234567890 Yes
SMS 456 2345678900 Error
问题:
我们使用 Java-Spring/Hibernate 内部构建了报告屏幕,用户可以在其中查看报告。我们只需在数据库中添加查询,框架将处理其余部分。
用户可以在报告中动态添加条件,也可以按模式或已发送(状态)进行搜索。屏幕上有一个搜索工具,可以只检索电子邮件记录或 SMS 记录。也是用户可以按已发送(状态)搜索的另一个标准。
目前,内部构建的框架只是根据用户输入将 where 条件附加到整个查询。因此,我不能使用 UNION 子句来检索报告。
那么,编写 SQL 查询的最佳选择是什么,我可以在其中按预期检索数据,可能使用 JOIN 子句,但这里我没有可以在两个之间加入的任何字段表,并且已经突出显示我不能使用 UNION 子句。
PS: 两个表的Seq
只是它们的主键,所以不能用来连接。
I think below query should solve your problem.
select * from
(
select 'EMAIL' as Mode, cust_id, email_id as sent_to, Sent
from EMAIL_Request
union all
select 'SMS' as Mode, cust_id, Mob_no as sent_to, Sent
from SMS_Request
) as temp
where temp..... = ...
如果您认为不能使用 UNION 的原因是您必须编写仅包含一个 WHERE 子句的查询,那么请使用 CTE:
WITH CTE AS (
Query1
UNION ALL
Query2
)
SELECT * FROM CTE
WHERE...
我有一个问题,不确定是否有可能的解决方案,但仍然想在这个论坛上提出这个问题,因为这里有一些大师可能会提供一些解决方案:)
我有两个表 - EMAIL_Request 和 SMS_Request。下面提供了示例数据模型。
Email_Request
Seq Cust_ID Email_ID Sent
1 123 test@gmail.com Yes
2 234 abc@gmail.com No
SMS_Request
Seq Cust_ID MobileNo Sent
1 345 1234567890 Yes
2 456 2345678900 Error
举报
我必须在一个带有模式的报告中显示两个表的输出。预期报告样本。
Mode Cust_Id Sent_To Sent
EMAIL 123 test@gmail.com Yes
EMAIL 234 abc@gmail.com No
SMS 345 1234567890 Yes
SMS 456 2345678900 Error
问题:
我们使用 Java-Spring/Hibernate 内部构建了报告屏幕,用户可以在其中查看报告。我们只需在数据库中添加查询,框架将处理其余部分。
用户可以在报告中动态添加条件,也可以按模式或已发送(状态)进行搜索。屏幕上有一个搜索工具,可以只检索电子邮件记录或 SMS 记录。也是用户可以按已发送(状态)搜索的另一个标准。
目前,内部构建的框架只是根据用户输入将 where 条件附加到整个查询。因此,我不能使用 UNION 子句来检索报告。
那么,编写 SQL 查询的最佳选择是什么,我可以在其中按预期检索数据,可能使用 JOIN 子句,但这里我没有可以在两个之间加入的任何字段表,并且已经突出显示我不能使用 UNION 子句。
PS: 两个表的Seq
只是它们的主键,所以不能用来连接。
I think below query should solve your problem.
select * from
(
select 'EMAIL' as Mode, cust_id, email_id as sent_to, Sent
from EMAIL_Request
union all
select 'SMS' as Mode, cust_id, Mob_no as sent_to, Sent
from SMS_Request
) as temp
where temp..... = ...
如果您认为不能使用 UNION 的原因是您必须编写仅包含一个 WHERE 子句的查询,那么请使用 CTE:
WITH CTE AS (
Query1
UNION ALL
Query2
)
SELECT * FROM CTE
WHERE...