SQL Server:別のテーブルにリンクされていないレコードを選択します

オレグSh

私はテーブルを持っています:

CREATE TABLE [dbo].[CollectionSite]
(
    [SiteCode] [nvarchar](32) NOT NULL,
    [AddressId] [int] NOT NULL,
    [RemittanceId] [int] NULL,
    // additional columns
)

およびリンクされたテーブル:

CREATE TABLE [dbo].[CollectionSiteAddress]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](255) NULL,
    [Address1] [nvarchar](255) NULL,
    [Address2] [nvarchar](255) NULL,
    [City] [nvarchar](128) NULL,
    [State] [nvarchar](64) NULL,
    [Zip] [nvarchar](32) NULL,
)

これら2つのテーブル間の関係:

ALTER TABLE [dbo].[CollectionSite] WITH CHECK 
    ADD CONSTRAINT [FK_CollectionSite_CollectionSiteAddress_AddressId] 
        FOREIGN KEY([AddressId]) REFERENCES [dbo].[CollectionSiteAddress] ([Id])
GO

ALTER TABLE [dbo].[CollectionSite]  WITH CHECK 
    ADD CONSTRAINT [FK_CollectionSite_CollectionSiteAddress_RemittanceId]  
        FOREIGN KEY([RemittanceId]) REFERENCES [dbo].[CollectionSiteAddress] ([Id])
GO

CollectionSiteAddressリンクされていないCollectionSite(どちらAddressIdでもないRemittanceIdすべてのレコードをから選択したいどのリクエストを使用する必要がありますか?

私は試した:

SELECT *
FROM CollectionSiteAddress 
LEFT JOIN CollectionSite ON CollectionSiteAddress.Id = CollectionSite.AddressId 
                         OR CollectionSiteAddress.Id = CollectionSite.RemittanceId

しかし、それはからすべてのレコードを選択します CollectionSiteAddress

forpas

このWHEREがありません

WHERE CollectionSite.[SiteCode] IS NULL

の一致しないすべての行が必要なためですCollectionSiteAddress
この列を使用して、テーブルの定義でn​​ull許容でないため[SiteCode]かどうかを確認しNULLました。
したがって、次のようにクエリを記述できます(エイリアスで短縮)。

SELECT csa.*
FROM CollectionSiteAddress csa LEFT JOIN CollectionSite cs
ON csa.Id = cs.AddressId OR csa.Id = cs.RemittanceId
WHERE cs.[SiteCode] IS NULL

または使用NOT EXISTS

SELECT csa.*
FROM CollectionSiteAddress csa 
WHERE NOT EXISTS (
  SELECT 1 
  FROM CollectionSite cs
  WHERE csa.Id = cs.AddressId OR csa.Id = cs.RemittanceId
)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SQLテーブルを結合して、結合されたテーブルに存在しないレコードを選択します

分類Dev

存在しない場所を使用して個別のサブクエリを選択すると、SQL行はテーブルから削除されません

分類Dev

MySQL-SQL LEFT JOINは、他のテーブルにないnullレコードを選択します

分類Dev

SQLは、その値が別のテーブルにレコードを持っている値を効率的に選択します

分類Dev

SQLクエリ-あるテーブルからすべてを選択し、別のテーブルのレコードが一致します

分類Dev

SQL ステートメントで選択されていないレコードを選択する方法は?

分類Dev

iSeries SQL:テーブルを作成するためにレコードを選択するときに現在の日付は許可されていません

分類Dev

SQL:特定のフィールドのセットがテーブルで複製されているすべてのエントリを選択します

分類Dev

SQL:2つのテーブルから一致しないレコードを選択します

分類Dev

別のテーブルにない1つのテーブルから行を選択するSQLクエリ

分類Dev

エントリのないレコードに対してのみSQLテーブルに挿入します

分類Dev

SQL Serverの別のテーブルと完全に一致する1つのテーブルからすべてのレコードを選択するにはどうすればよいですか?

分類Dev

このSQLクエリを使用している場合、値が重複します。つまり、テーブルには1つのレコードしかなく、8つのレコードが表示されます。

分類Dev

SQL Server:動的な値のテーブルから列に値が含まれていないすべての行を選択します

分類Dev

他のテーブルに存在しないすべてのレコードをカウントします-SQLクエリ

分類Dev

SQL:ある列に値があり、その値が別のテーブルに含まれていない行を選択します

分類Dev

SQL:入力されているか空の場合、別のテーブルに基づいて行を選択します

分類Dev

SQL "with"句-エラーコード:1046。データベースが選択されていませんスキーマで名前をダブルクリックして、使用するデフォルトのDBを選択します

分類Dev

Oracle SQL: すべてのレコードに別の特定の値が含まれていない個別の値を選択する

分類Dev

別のテーブルのすべてのIDに同じレコードを新しいテーブルに挿入するSQLクエリ

分類Dev

Oracle SQL:条件に基づいて特定のレコードをあるテーブルから別のフィルタリング行に転送します

分類Dev

別のテーブルにないIDを持つレコードを検索するSQLクエリ

分類Dev

別のテーブルから欠落しているレコードを表示するSQLクエリ

分類Dev

テーブルSQLに最も多く表示されるレコードを選択します

分類Dev

別のテーブルに存在しない列を選択しますSQLの複数の列

分類Dev

SQL Serverの一意の日付に基づいてレコードを選択し、その日付のレコード数をカウントします

分類Dev

CrystalReportが選択式に基づいてSQLレコードをフィルタリングしない

分類Dev

テーブルの単一行の値に関連して別のテーブルからいくつかの項目を選択するSQLクエリ

分類Dev

sqlは、テーブルYでコミネーションされていないテーブルXからすべてのユーザーを選択します

Related 関連記事

  1. 1

    SQLテーブルを結合して、結合されたテーブルに存在しないレコードを選択します

  2. 2

    存在しない場所を使用して個別のサブクエリを選択すると、SQL行はテーブルから削除されません

  3. 3

    MySQL-SQL LEFT JOINは、他のテーブルにないnullレコードを選択します

  4. 4

    SQLは、その値が別のテーブルにレコードを持っている値を効率的に選択します

  5. 5

    SQLクエリ-あるテーブルからすべてを選択し、別のテーブルのレコードが一致します

  6. 6

    SQL ステートメントで選択されていないレコードを選択する方法は?

  7. 7

    iSeries SQL:テーブルを作成するためにレコードを選択するときに現在の日付は許可されていません

  8. 8

    SQL:特定のフィールドのセットがテーブルで複製されているすべてのエントリを選択します

  9. 9

    SQL:2つのテーブルから一致しないレコードを選択します

  10. 10

    別のテーブルにない1つのテーブルから行を選択するSQLクエリ

  11. 11

    エントリのないレコードに対してのみSQLテーブルに挿入します

  12. 12

    SQL Serverの別のテーブルと完全に一致する1つのテーブルからすべてのレコードを選択するにはどうすればよいですか?

  13. 13

    このSQLクエリを使用している場合、値が重複します。つまり、テーブルには1つのレコードしかなく、8つのレコードが表示されます。

  14. 14

    SQL Server:動的な値のテーブルから列に値が含まれていないすべての行を選択します

  15. 15

    他のテーブルに存在しないすべてのレコードをカウントします-SQLクエリ

  16. 16

    SQL:ある列に値があり、その値が別のテーブルに含まれていない行を選択します

  17. 17

    SQL:入力されているか空の場合、別のテーブルに基づいて行を選択します

  18. 18

    SQL "with"句-エラーコード:1046。データベースが選択されていませんスキーマで名前をダブルクリックして、使用するデフォルトのDBを選択します

  19. 19

    Oracle SQL: すべてのレコードに別の特定の値が含まれていない個別の値を選択する

  20. 20

    別のテーブルのすべてのIDに同じレコードを新しいテーブルに挿入するSQLクエリ

  21. 21

    Oracle SQL:条件に基づいて特定のレコードをあるテーブルから別のフィルタリング行に転送します

  22. 22

    別のテーブルにないIDを持つレコードを検索するSQLクエリ

  23. 23

    別のテーブルから欠落しているレコードを表示するSQLクエリ

  24. 24

    テーブルSQLに最も多く表示されるレコードを選択します

  25. 25

    別のテーブルに存在しない列を選択しますSQLの複数の列

  26. 26

    SQL Serverの一意の日付に基づいてレコードを選択し、その日付のレコード数をカウントします

  27. 27

    CrystalReportが選択式に基づいてSQLレコードをフィルタリングしない

  28. 28

    テーブルの単一行の値に関連して別のテーブルからいくつかの項目を選択するSQLクエリ

  29. 29

    sqlは、テーブルYでコミネーションされていないテーブルXからすべてのユーザーを選択します

ホットタグ

アーカイブ