MySQL条件下的查询

时间:2013-10-04 15:01:25

标签: mysql sql if-statement case conditional-statements

我有以下表格:

用户:

  

ID,用户名,所有者

ADMINS

  

ID,用户名,所有者

交易:

  

ID,SENDER_ID,sender_type

每个用户都可以由管理员拥有 每个管理员都可以由另一个管理员拥有

我正在尝试处理某些访问级别,并且我想检索具有通过PHP生成的列表的发件人部分的所有者的查询行。

为此,我需要根据我拥有的数据获取发件人的所有者,而不必更改数据库结构:

SELECT 
    * ,
    IF (t.sender_type='admin',
        ( SELECT owner AS qowner 
          FROM admins
          WHERE id=t.sender_id),
          ( SELECT owner AS qowner FROM users 
            WHERE id=t.sender_id)
    ) AS qowner 
FROM `transactions` t 
WHERE qowner IN ('admin22','admin33','admin44','admin66')

我不断收到此错误:'where子句'中的未知列'qowner'

我现在坚持这个。 我将非常感谢所有的帮助。 谢谢!

2 个答案:

答案 0 :(得分:3)

您似乎试图从我认为的WHERE子句中的子选择中引用一列。

但不需要子选择: -

SELECT * ,
IF (t.sender_type='admin', a.owner, b.owner) AS qowner 
FROM transactions t 
LEFT OUTER JOIN admins a ON t.sender_id = a.id
LEFT OUTER JOIN users b ON t.sender_id = a.id
HAVING qowner IN ('admin22','admin33','admin44','admin66')

答案 1 :(得分:0)

SELECT * ,
IF (t.sender_type='admin',(SELECT owner FROM admins WHERE id=t.sender_id),(SELECT owner FROM users WHERE id=t.sender_id)) AS qowner 
FROM transactions t 
WHERE qowner IN ('admin22','admin33','admin44','admin66')

(未测试的)