Sql-Server

使用內部聯接在請求中跳過一行(sql compact server 4.0)

  • October 3, 2021

我正在使用 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#')"

引用自:https://dba.stackexchange.com/questions/300460