2

だから私は3つのテーブルを持っています、

Companies (company_id, company_name)
Stock_Exchanges(stock_exchange_id, stock_exchange_name, stock_exchange_manager)
Stock_Exchanges_Companies(stock_exchange_id, company_id)

特定の にないすべての会社を選択しようとしていますstock_exchange

私はこれまでのところこれを持っています:

SELECT COMPANY_NAME
  FROM COMPANIES c
  LEFT OUTER JOIN STOCK_EXCHANGES_COMPANIES sec 
    ON c.COMPANY_ID = sec.COMPANY_ID
  LEFT OUTER JOIN STOCK_EXCHANGES se 
    ON sec.STOCK_EXCHANGE_ID = se.STOCK_EXCHANGE_ID
 WHERE sec.COMPANY_ID != se.COMPANY_ID;

WHEREただし、句を使用すると、ゼロ行が返されます。どんな助けでも大歓迎です!

4

2 に答える 2

1

一致する stockExchangeID に基づいてテーブルを結合してから、一致する stockExchangeID を持たない行に絞り込みます。これが、行が取得されない理由です。はい、それらは左結合なので、一致しない場合は結合の右部分から null を取得しますが、このように設定するのは直感に反するようです。

特定の stock_exchange (証券取引所のない会社を含む) を持たないすべての会社が必要であると仮定すると、最初の where 条件を失い、次のようにします。

SELECT COMPANY_NAME
FROM COMPANIES c
LEFT OUTER JOIN STOCK_EXCHANGES_COMPANIES sec 
    ON c.COMPANY_ID = sec.COMPANY_ID
LEFT OUTER JOIN STOCK_EXCHANGES se 
    ON sec.STOCK_EXCHANGE_ID = se.STOCK_EXCHANGE_ID
WHERE se.STOCK_EXCHANGE_ID != [idhere];

証券取引所を持っているが特定の証券取引所を持っていない会社を選択するには、STOCK_EXCHANGES に参加していることを確認する条件を 1 つ追加します。

SELECT COMPANY_NAME
FROM COMPANIES c
LEFT OUTER JOIN STOCK_EXCHANGES_COMPANIES sec 
    ON c.COMPANY_ID = sec.COMPANY_ID
LEFT OUTER JOIN STOCK_EXCHANGES se 
    ON sec.STOCK_EXCHANGE_ID = se.STOCK_EXCHANGE_ID
WHERE se.STOCK_EXCHANGE_ID != [idhere]
    AND se.STOCK_EXCHANGE_ID IS NOT NULL;
于 2013-08-20T14:59:10.717 に答える