创建一个显示具有特定值的两个列表的视图

时间:2012-12-22 02:11:05

标签: mysql sql

我想要两个列表,它们都显示来自各自表的记录,这些记录没有被另一个表使用。

两个列表,一个用于表 a_aif ,另一个用于表 a_proxy 。列表仅显示fee_source_id's

列中不存在的a_fees.fee_sourceSELECT 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);

这是我到目前为止(两个单独的查询)。有没有办法在不同的列中使用这两个列表进行查看?

{{1}}

1 个答案:

答案 0 :(得分:0)

此方法应该与您正在使用的RDBMS非常相关。

从中选择右侧为LEFT JOIN的记录的NULL对将执行此操作。 UNION查询用于从a_aifa_proxy表格构建ID的主列表。

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