2017-05-23 11 views
-2

を動作していない参加します。左除く、私は2つのSQLクエリを持って

Select * from users (Returns 74 rows) 

id  firstname  lastname 
1  vignesh   km 
2  hariram   v 
3  vijesh   g 
. 
. 
74  ram    k 


Select * from details where time between '2017-05-11 00:00:00' AND '2017-05-11 23:59:59' (Returns 5 row). 


id  userid  logindate 
57  1   2017-05-11 09:07:23 
63  3   2017-05-11 09:04:57 
65  6   2017-05-11 09:14:45 
83  13   2017-05-11 09:26:43 
65  74   2017-05-11 09:11:53 

私は両方が動作していない

SELECT * 
FROM details dt LEFT JOIN users us ON us.id = dt.userid 
WHERE dt.logindate BETWEEN '2017-05-11 00:00:00' AND '2017-05-11 23:59:59' OR dt.userid IS NULL 
GROUP BY dt.userid; (6 rows returning - in that one row contains full of null) 

SELECT * 
FROM details dt LEFT JOIN users us ON us.id = dt.userid 
WHERE dt.logindate BETWEEN '2017-05-11 00:00:00' AND '2017-05-11 23:59:59' 
GROUP BY dt.userid; (5 rows returning) 


id  userid  logindate    firstname  lastname 
57  1   2017-05-11 09:07:23  vignesh   km 
63  3   2017-05-11 09:04:57  vijesh   g 
65  6   2017-05-11 09:14:45  ..    .. 
83  13   2017-05-11 09:26:43  ..    .. 
65  74   2017-05-11 09:11:53  ram    k 

を試してみました。しかし、私は最初のクエリ結果で利用可能で、2番目のクエリ結果では利用できない69行が必要です。

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql -query – Yunnosch

+0

'SELECT * 詳細からdt LEFT JOINユーザーus us.id = dt.userid dt.useridはNULLではなく、dt.logindateは '2017-04-26 00:00:00'と '2017 -04-26 23:59:59'' – Nimish

+0

@Nimishは答え、なぜあなたはそれをコメントに入れないように見えますか? – Yunnosch

答えて

2

、GROUP BYを使用しないでください:

select * 
from users u 
left join details d on u.id = d.userid 
and d.logindate BETWEEN '2017-05-11 00:00:00' AND '2017-05-11 23:59:59' 
where d.id is null 

または使用not exists

select * 
from users u 
where not exists (
    select 1 
    from details d 
    where u.id = d.userid 
    and d.logindate BETWEEN '2017-05-11 00:00:00' AND '2017-05-11 23:59:59' 
) 
-1
Select * from users us 
left join details dt on us.id=dt.userid 
WHERE dt.logindate NOT BETWEEN '2017-04-26 00:00:00' AND 
'2017-04-26 23:59:59' GROUP BY dt.userid 
+0

この回答にはもう1つ問題があります。詳細のテーブルでユーザーの詳細が利用できない場合は、そのユーザーを取得しません。 –

+0

あなたはあなたがnullを得るよりも詳細に存在しないjoin.ifのままになっているので、あなたはそのユーザーを取得します。私は詳細よりもユーザーを優先しています。だから私はあなたのユーザーを得るでしょう –

-1

あなたがgroup byを使用している理由を私は知りませんが、あなたがdetailsに存在しませusersレコードを取得したい場合、あなたはこれを試すことができ

SELECT * FROM details dt 
LEFT JOIN users us ON us.id = dt.userid 
WHERE dt.userid IS NOT NULL AND dt.logindate 
BETWEEN '2017-05-11 00:00:00' AND '2017-05-11 23:59:59 
+0

@down_voters、ダウン投票の正当な理由を投稿してください。 – Nimish

関連する問題