1

別のテーブルで使用されていないそれぞれのテーブルのレコードを表示する2つのリストが必要です。

2つのリスト。1つはテーブルa_aif用で、もう1つはテーブルa_proxy用です。fee_source_id's列に存在しないもののみを表示するリストa_fees.fee_source

これが私がこれまでに持っているものです(2つの別々のクエリ)。これらの2つのリストを別々の列に表示する方法はありますか?

SELECT a_aif.fee_source_id
FROM a_aif, a_fees
WHERE a_fees.fee_source NOT IN (SELECT a_aif.fee_source_id);

SELECT a_proxy.fee_source_id
FROM a_proxy, a_fees
WHERE a_fees.fee_source NOT IN (SELECT a_proxy.fee_source_id);
4

1 に答える 1

0

この方法は、使用しているRDBMSにかなり依存しないはずです。

LEFT JOIN右側が存在するレコードを選択するためののペアが実行されNULLます。クエリは、とテーブルUNIONの両方からIDのマスターリストを作成するために使用されます。a_aifa_proxy

SELECT 
  full_list.fee_source_id,
  CASE WHEN aif_fee_source_id IS NOT NULL THEN 'present' ELSE 'not-present' END AS aif,
  CASE WHEN proxy_fee_source_id IS NOT NULL THEN 'present' ELSE 'not-present' END AS proxy
FROM (
  /* UNION list gets total list of ids from both tables */
  SELECT fee_source_id FROM a_aif
  UNION SELECT fee_source_id FROM a_proxy
) full_list
LEFT JOIN (
  /* First subquery joins to get ids not present in a_aif */
  SELECT fee_source_id AS aif_fee_source_id
  FROM
    a_aif
    LEFT JOIN a_fees ON a_aif.fee_source_id = a_fees.fee_source
) aif ON full_list.fee_source_id = aif_fee_source_id
LEFT JOIN (
  /* Second subquery joins to get ids not present in a_proxy */
  SELECT fee_source_id AS proxy_fee_source_id
  FROM
    a_proxy
    LEFT JOIN a_fees ON a_proxy.fee_source_id = a_fees.fee_source
) proxy ON full_list.fee_source_id = proxy.proxy_fee_source_id

http://sqlfiddle.com/#!2/cc170/3

于 2012-12-22T02:31:07.140 に答える