1

これが私のクエリです:

SELECT logins.user as user, 
       rozliczenia.godziny as godziny, 
       rozliczenia.stawka  as stawka, 
       rozliczenia.premia as premia, 
       rozliczenia.premiainna as premiainna 
  FROM logins 
       LEFT JOIN rozliczenia ON logins.id=rozliczenia.userid 
 WHERE user!='SUPERUSER' 
   AND user!='agata' 
   AND user!='tomek' 
   AND DATE(rozliczenia.data) BETWEEN 
          DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm')

私のログインには次のものがあります。

bartosz
iza
grzegorz
slawek
pawel
michal

しかし、私のrozliczeniaテーブルには次のものしかありません:

bartosz
iza
grzegorz
slawek
pawel

左結合は logins テーブルからすべてのユーザーを返す必要がありますが、内部結合のように機能しますか?

4

3 に答える 3

3

あなたのwhere句は、外部結合を内部結合に変えています。少なくとも、この句は次のことを行います。

 DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm')

一致するものがない場合、 is であるため、これは失敗しdataますNULL

2 番目のテーブルの条件をon句に移動する必要があります。これがそのような唯一の条件であるかどうかはわかりません。

于 2015-10-07T22:06:37.130 に答える
2

これにより、LEFT JOIN が INNER JOIN に変わります

WHERE ... AND DATE(rozliczenia.data) BETWEEN ...

「権利」のない結果はすべてのフィールドが NULL にDATE(rozliczenia.data)なるため、NULL になります。

于 2015-10-07T22:06:36.393 に答える