选择具有If条件的子句

时间:2014-04-29 09:02:56

标签: mysql

我正在尝试在2个表格中进行查询。

我有一个带有id_person和message的表:( addedEvent)和其他带有id_person,姓名和姓氏的表。 (注册)

问题在于消息可能与一个人(id_person)或每个人(id_person = 0)相关,因此我想在需要时记录每个人的姓名和姓氏,而不是在不需要时。我试过这个:

SELECT message,
       IF(id_person!= 0,
          SELECT name
          FROM registered
          WHERE addedEvents.id_person= registered.id_person, 0) AS name,
       IF(id_person!= 0,
          SELECT surname
          FROM registered
          WHERE addedEvents.id_person= registered.id_person, 0) AS surname
FROM addedEvents

但是给我一个语法错误而且我没有看到它。

3 个答案:

答案 0 :(得分:2)

试试这个:

SELECT message,
    IF(
        id_person != 0,
        (
            SELECT name 
            FROM registered 
            WHERE addedEvents.id_person = registered.id_person
        ),
        '0'
    ) AS name,
    IF(
        id_person != 0,
        (
            SELECT surname
            FROM registered 
            WHERE addedEvents.id_person = registered.id_person
        ),
        '0'
    ) AS surname
FROM addedEvents

答案 1 :(得分:1)

我认为您正在尝试选择已注册的相关人员的消息。

试试这个

select
        r.name, r.surname, e.message
  from 
        addedEvents e, registered r
where 
        e.id_person = r.id_person
  and   r.id_person != 0

答案 2 :(得分:1)

您不能将SQL视为具有流控制结构等的常规编程语言。您的查询似乎甚至不需要它:

SELECT ae.message, re.name, re.surname
FROM addedEvents ae
LEFT JOIN registered re ON ae.id_person=re.id_person