if条件下的MySQL查询

if条件下的MySQL查询,mysql,sql,if-statement,case,conditional-statements,Mysql,Sql,If Statement,Case,Conditional Statements,我有以下表格: 用户: id、用户名、所有者 管理员 id、用户名、所有者 交易: id,发送者id,发送者类型 每个用户都可以由管理员拥有 每个管理员可以由另一个管理员拥有 我正在尝试一些访问级别,我想检索通过PHP生成的列表中具有发送者部分所有者的查询行 为此,我需要根据我拥有的数据获取发送者的所有者,而无需更改数据库结构: SELECT * , IF (t.sender_type='admin', ( SELECT owner AS qowner

我有以下表格:

用户:

id、用户名、所有者

管理员

id、用户名、所有者

交易:

id,发送者id,发送者类型

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

我正在尝试一些访问级别,我想检索通过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”

我现在被这件事难住了。 我将感谢所有的帮助。 谢谢大家!

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')
未经测试


未测试

您似乎试图引用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')

您似乎试图引用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')

您为不同的事情使用了qowner别名三次,这就是为什么错误i删除了别名,并仅在IF查询之后使用它,但仍然存在相同的问题。这是因为您试图在where子句中使用别名。别名在WHERE子句求值后才有效存在-您将qowner alias用于不同的事情三次,这就是为什么错误i删除了别名,并仅在IF查询后使用它,但仍然存在相同的问题。这是因为您试图在WHERE子句中使用别名。在计算WHERE子句之前,别名实际上不存在-将查询修改为:SELECT*,如果t.sender\u type='admin',从admins中选择owner,其中id=t.sender\u id,从id=t.sender\u id的用户中选择owner,作为“admin22”、“admin33”、“admin44”中事务t中qowner的qowner,“admin66”和我得到了相同的错误。无论如何,感谢您的帮助将查询修改为:选择*,如果t.sender\u type='admin',则从admins中选择owner,其中id=t.sender\u id,从id=t.sender\u id的用户中选择owner,作为事务t中的qowner,其中qowner位于'admin22'、'admin33'、'admin44'、'admin66'中,我收到了相同的错误。不管怎样,谢谢你的帮助是的,我正试图参考子选集中的一个专栏。我会试试这个,让你知道我用的是我自己的查询,但不是在哪里,我用的是have,它起作用了!是的,我试图引用子选择中的一列。我会试试这个,让你知道我用的是我自己的查询,但不是在哪里,我用的是have,它起作用了!