Sql-Server
使用內部聯接在請求中跳過一行(sql compact server 4.0)
我正在使用 SQL server compact 4.0 和 VB.net 以及 Visual Studio 2019。
我正在使用此請求從 4 個表中提取資訊:Table0、Table1、Table2 和 Table3。這個請求以前工作得很好,但現在我遇到了一個問題,因為表 3 (ID_C) 中的一列現在重複了,而這個請求需要表 3 而沒有這個重複。
我的問題的一種解決方案是創建一個新表(表 3 沒有重複),問題將得到解決。但我在想,因為我是 SQL 初學者,也許有一種解決方案可以在請求中跳過 Table3 中的一行。我已經搜尋過,但我沒有找到解決這個問題的方法。
"SELECT Table0.M " + "FROM Table1 INNER JOIN " + "Table2 ON Table1.ID = Table2.ID_V INNER JOIN " + "LM ON Table2.ID_M = Table0.ID_M INNER JOIN " + "Table3 ON Table2.ID_C = Table3.ID_C " + "WHERE (Table1.IDX_V = #IDX_V#) AND (Table3.ID_C = '#ID_C#')"
在程式碼中#IDX_V# 和#ID_C# 被一些值替換。
您可以使用
EXISTS
子查詢"SELECT Table0.M FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID_V INNER JOIN LM ON Table2.ID_M = Table0.ID_M WHERE Table1.IDX_V = @IDX_V AND EXISTS (SELECT 1 FROM Table3 WHERE Table2.ID_C = Table3.ID_C AND Table3.ID_C = @ID_C);"
注意使用正確的參數,而不是注入。以及使用多行字元串
如果該行 100% 重複,您可以嘗試使用**distinct**。這會給你獨特的結果。這不會“跳過”一行,但只會顯示任何重複的 1 行。
"SELECT DISTINCT Table0.M " + "FROM Table1 INNER JOIN " + "Table2 ON Table1.ID = Table2.ID_V INNER JOIN " + "LM ON Table2.ID_M = Table0.ID_M INNER JOIN " + "Table3 ON Table2.ID_C = Table3.ID_C " + "WHERE (Table1.IDX_V = #IDX_V#) AND (Table3.ID_C = '#ID_C#')"