0

ID で結合された 2 つのテーブルがあります。Contract テーブルには、ID が一致していても保証テーブルとデータが一致しない列がいくつかあることがわかっています。以下のクエリを使用していますが、正しいように見えますか?

SELECT con.m_warranty_sku_id,
       con.contract_type,
       con.program_type,
       con.underwriter,
       wsk.m_warranty_sku_id,
       wsk.contract_type,
       wsk.program_type,
       wsk.sku_underwriter
FROM   mdhdba.m_contract con,
       mdhdba.m_warranty_sku wsk
WHERE  ( wsk.m_warranty_sku_id = con.m_warranty_sku_id )
       AND con.contract_type <> wsk.contract_type 
4

2 に答える 2

1

はい、解決策として正しいです。結合を明示するためにクエリを調整しました

SELECT con.m_warranty_sku_id,
       con.contract_type,
       con.program_type,
       con.underwriter,
       wsk.m_warranty_sku_id,
       wsk.contract_type,
       wsk.program_type,
       wsk.sku_underwriter
FROM   mdhdba.m_contract con innerjoin mdhdba.m_warranty_sku wsk
ON wsk.m_warranty_sku_id = con.m_warranty_sku_id
WHERE  con.contract_type <> wsk.contract_type 
于 2012-09-19T17:17:05.397 に答える
0

上記のクエリは NULL 列を処理できません。m_warranty_sku_id の行が複数ある場合も、問題が発生します。

1. 結合に null 値がある場合は、NULL を排他的に処理します。2. MINUS および UNION 句を使用して、一致しない m_warranty_sku_id を分離し、それらの値に対してのみテーブルを結合することができます。

于 2012-09-19T18:21:56.653 に答える