我有一個問題,並不確定是否有一個可能的解決方案,但仍然認爲在此論壇中提出它,因爲這裏有一些主人可能能夠提供一些解決方案:)SQL Server - 不使用UNION子句從單獨的表中檢索數據
我有兩個表 - EMAIL_Request和SMS_Request。下面提供了示例數據模型。
Email_Request
Seq Cust_ID Email_ID Sent
1 123 [email protected] Yes
2 234 [email protected] No
SMS_Request
Seq Cust_ID MobileNo Sent
1 345 1234567890 Yes
2 456 2345678900 Error
報告
我必須證明這兩個表的輸出與模式單一報告。樣本預期報告。
Mode Cust_Id Sent_To Sent
EMAIL 123 [email protected] Yes
EMAIL 234 [email protected] No
SMS 345 1234567890 Yes
SMS 456 2345678900 Error
問題:
我們已經在內部使用內置Java的春/ Hibernate的報告屏幕,用戶可以看到該報告。我們只需要在數據庫中添加Query,框架將處理其餘的部分。
用戶可以在報表中動態添加條件,也可以按模式或發送(狀態)進行搜索。屏幕上有一個搜索工具來檢索電子郵件記錄或SMS記錄。用戶可以通過發送(狀態)進行搜索的另一個標準。
目前,內部構建的框架只是簡單地將where條件附加到整個查詢中,具體取決於用戶輸入。因此,我不能使用UNION子句檢索報告。
那麼,寫一個SQL查詢的最佳選擇是什麼,我可以根據預期檢索數據,可能使用JOIN子句,但是在這裏我沒有任何字段可以在兩個表之間加入,並且已經突出顯示我不能使用UNION子句。
PS:Seq
這兩個表只是它們的主鍵,所以不能用於連接。
看起來像你可以在子查詢中使用'UNION',並讓你的框架附加一個'where'子句。懷疑它是最有效的解決方案,儘管子查詢或CTE是 – HoneyBadger
,它是我能想到的最有效的解決方案。 –
Hi @TabAlleman ..我不能使用UNION,因爲系統會將where子句附加到最後一個查詢。例如。示例聯合查詢將選擇'EMAIL'作爲Mode,cust_id,email_id作爲Sent_To,從Email_Request發送UNION選擇'SMS'作爲模式,cust_id,mobileNo作爲Sent_To,從SMS_Request發送........用戶將添加搜索條件,然後系統將附加where子句的東西像選擇'EMAIL'作爲模式,cust_id,email_id作爲Sent_To,從Email_Request發送UNION選擇'SMS'作爲模式,cust_id,mobileNo作爲Sent_To,從SMS_Request發送,其中Sent = '是'。所以沒有哪裏條款Email_Request – vnkotak