我有以下表格:
用户:
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'
我现在坚持这个。 我将非常感谢所有的帮助。 谢谢!
答案 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')
(未测试的)