2017-11-29 3 views
1

私はMySQLに変換しようとしているOracleのSQLクエリを使用しています。OracleをMySQLに変換する:出力が異なる

以下は両方からのクエリの一部です。データベースの構造が異なるため、異なるテーブルとカラムの名前が見つかります。

私はそれを実行するとMYSQLの部分で何の結果も得られません。理由を調べるのに助けが必要ですか?

OracleのSQLクエリ:

(SELECT all_ips.child_itm_num, 
      pres.child_itm_num AS present, 
      prev.child_itm_num AS potential_prev_version 
    FROM 
      (SELECT DISTINCT child_itm_num 
      FROM EDW.dpdm_bom bom 
      WHERE root_itm_num IN ('a','b')) all_ips, 
      (SELECT DISTINCT child_itm_num 
      FROM EDW.dpdm_bom bom 
      WHERE root_itm_num = 'b') pres, 
    (SELECT DISTINCT child_itm_num 
    FROM EDW.dpdm_bom bom 
    WHERE root_itm_num = 'a') prev 
    WHERE SUBSTR(all_ips.child_itm_num,0,LENGTH(all_ips.child_itm_num) - 3) = SUBSTR(pres.child_itm_num, 0,LENGTH(pres.child_itm_num) - 3) 
    AND SUBSTR(prev.child_itm_num,0,LENGTH(prev.child_itm_num) - 3)  = SUBSTR(pres.child_itm_num, 0,LENGTH(pres.child_itm_num) - 3) 
    AND prev.child_itm_num NOT IN (SELECT child_itm_num 
             FROM EDW.dpdm_bom bom 
             WHERE root_itm_num ='b')) 

enter image description here

MySQLのクエリ:

(SELECT all_ips.child_name, 
      pres.child_name AS present, 
      prev.child_name AS potential_prev_version 
    FROM 
      (SELECT DISTINCT child_name 
      FROM DPDM_BOM bom 
      WHERE child_name IN ('a','b')) all_ips, 
      (SELECT DISTINCT child_name 
      FROM DPDM_BOM bom 
      WHERE revision_name = 'b') pres, 
      (SELECT DISTINCT child_name 
      FROM DPDM_BOM bom 
      WHERE revision_name = 'a') prev 
    WHERE SUBSTR(all_ips.child_name,0,LENGTH(all_ips.child_name) - 3) = SUBSTR(pres.child_name, 0,LENGTH(pres.child_name) - 3) 
    AND SUBSTR(prev.child_name,0,LENGTH(prev.child_name) - 3)  = SUBSTR(pres.child_name, 0,LENGTH(pres.child_name) - 3) 
    AND prev.child_name NOT IN (SELECT child_name 
             FROM DPDM_BOM bom 
             WHERE revision_name = 'b')) 

enter image description here

してください!

anushaをH.

答えて

1

私はあなたがWHERE revision_name IN ('a','b')WHERE child_name IN ('a','b')に置き換えるべきだと思います。また、LENGTHの代わりにCHAR_LENGTHを使用してください(MysqlでもLENTGHをサポートしていますが)。

(SELECT all_ips.child_name, 
      pres.child_name AS present, 
      prev.child_name AS potential_prev_version 
    FROM 
      (SELECT DISTINCT child_name 
      FROM DPDM_BOM bom 
      WHERE revision_name IN ('a','b')) all_ips, 
      (SELECT DISTINCT child_name 
      FROM DPDM_BOM bom 
      WHERE revision_name = 'b') pres, 
      (SELECT DISTINCT child_name 
      FROM DPDM_BOM bom 
      WHERE revision_name = 'a') prev 
    WHERE SUBSTR(all_ips.child_name,0,CHAR_LENGTH(all_ips.child_name) - 3) = SUBSTR(pres.child_name, 0,CHAR_LENGTH(pres.child_name) - 3) 
    AND SUBSTR(prev.child_name,0,LENGTH(prev.child_name) - 3)  = SUBSTR(pres.child_name, 0,LENGTH(pres.child_name) - 3) 
    AND prev.child_name NOT IN (SELECT child_name 
             FROM DPDM_BOM bom 
             WHERE revision_name = 'b'))         

希望すると助かります!

+0

私の場合、Child_name自体を検索する必要があります。ありがとう。 – Anusha

+0

しかし、あなたのOracleクエリーでは、あなたは 'root_itm_num IN( 'a'、 'b')'を探しています。これは、mysqlスキーマに相当する 'revision_name IN( 'a'、 'b')'です。それで、私は提案した。 –

+0

ああ、あなたは正しいです!私は他のいくつかの場所でそれを変更しなければならなかった。ありがとう:) – Anusha

関連する問題