当用户id未显示在另一个表中时,sql条件

时间:2014-05-21 14:15:15

标签: mysql sql

我有两个表,都包含created_at列。

用户:id,first_name,last_name,created_at

条目:id,user_id,created_at

下面是返回所有条目和用户的查询,但我需要添加条件以显示相应的created_at日期

select users.id, first_name, last_name, entries.created_at 
from users left join sweepstakes_entries on users.id = entries.user_id;

我将一个csv的mail-in条目导入到users表中,我需要编写一个sql语句,返回输入它们的用户的所有条目,以及我在users表中输入的邮件条目。

我使用左连接返回从csv文件导入的用户,因为他们在条目表中没有任何条目,但我仍然需要在sql结果中返回它们。

话虽如此,我需要在条目表(entries.created_at)中显示创建条目的时间的created_at日期,但我需要对created_at进行条件限制,以便当它拉入用户时(用户从mail-in csv导入它不会有条目表中的created_at日期来绑定它,所以我需要做一个条件,而不是使用entries.created_at,我使用users.created_at。

理论上:

if(此记录' users.id未显示在条目表中)     使用users.created_at作为created_at 其他     使用entries.created_at作为created_at

2 个答案:

答案 0 :(得分:2)

您有多种选择:

  1. 使用COALESCE - 从列表中返回第一个非空值。 SELECT COALESCE(Col1,Col2,Col3)

  2. 使用CASE WHEN, THEN检查Col1是否为空或=“0000-00-00”返回Col2,反之亦然

答案 1 :(得分:1)

通过它的声音你可以简单地使用COALESCE

select users.id, 
    first_name, 
    last_name, 
    COALESCE(entries.created_at, users.created_at) AS created_at
from users 
    left join sweepstakes_entries on users.id = entries.user_id;

您还可以使用不太便携的IFNULL

IFNULL(entries.created_at, users.created_at) AS created_at