1

以下のSQLがあります。テーブルへの内部結合を取得し、値をハードコーディングすると、2つのレコードが取得されます。しかし、内部結合ステートメントを使用すると、1つのレコードを取得するだけです。MYSQLでは、like句は大文字と小文字を区別しないことを認識しています。これが以下のSQLです。なぜそれが行を返すだけなのかわかりません。

SELECT 
      a.project_code as projectCode, 
      a.project_name as projectName, 
      a.project_creation_date as projectCreationDate, 
      a.project_end_date as projectEndDate, 
      a.project_status as projectStatus      
from projects a 
inner join tmp_rec_naren8 b 
    on a.project_name like concat("%",b.expertise_desc,"%") 
    OR a.project_description like concat("%",b.expertise_desc,"%") ;

上記を次のように変更した場合:

select *
from projects
where project_name like '%java%'
OR project_description like '%java%';

1行ではなく2行を取得します。

テーブルtmp_rec_naren8には列が1つだけexpertise_descあり、次のデータが含まれています。

expertise_desc
--------------
XML
Python
DWH
Java

テーブルprojectsには多くの列があります:..しかし、以下は関連するものです

    project_code sr_user_name project_name project_descriiption ..
    -----------------------------------------------------------
    1             naren5      POS          C++, XML,Java
    2             naren7      INV          Networking
    3             naren9      CCV          Java, Unix         

最初のクエリは1行を返します。

    project_code sr_user_name project_name project_descriiption ..
    ---------------------------------------------------------------
     1            naren5       POS         C++,XML,Java

2番目のクエリは2行を返します

    project_code sr_user_name project_name project_descriiption ..
    -----------------------------------------------------------
    1             naren5      POS          C++, XML,Java
    3             naren9      CCV          Java, Unix         
4

3 に答える 3

0

1つの説明は、の値にexpertise_desc末尾のスペースが含まれているかどうか、つまり'Java '(ではない'Java')です。その場合、連結値は'%java %'、ではなく'%java%'、になり、違いが生じます。

プロジェクト名の1つが。で終わりjavaもう1つが名前java にある場合、結合を使用して一致するのは1つだけですが、非結合と一致するのは2つです。

于 2012-06-08T13:18:59.130 に答える
0

次のことを試してみてください。

SELECT 
      a.project_code as projectCode, 
      a.project_name as projectName, 
      a.project_creation_date as projectCreationDate, 
      a.project_end_date as projectEndDate, 
      a.project_status as projectStatus      
from projects a, tmp_rec_naren8 b
where a.project_name like concat("%",b.expertise_desc,"%") 
    OR a.project_description like concat("%",b.expertise_desc,"%") ;
于 2012-06-08T13:19:16.077 に答える
0

試してみる:

SELECT        
a.project_code as projectCode,        
a.project_name as projectName,        
a.project_creation_date as projectCreationDate,        
a.project_end_date as projectEndDate,        
a.project_status as projectStatus       
from projects,tmp_rec_naren8
where LOCATE(TRIM(tmp_rec_naren8.expertise_desc),projects.project_name) > 0
or
LOCATE(TRIM(tmp_rec_naren8.expertise_desc),projects.project_description) > 0 
于 2012-06-08T13:26:42.647 に答える