所以我有以下表格
**accounts**
id | iban
1 | ES80 2310 0001 1800 0001 2345
2 | ES91 2100 0418 4502 0005 1332
**acc_rel**
account_id | target_table | target_id
1 | users | 2
2 | clients | 5
**users**
id | username | password
2 | abc | cba
**clients**
id | company_name
5 | some_name
所以问题是acc_rel
我有一个与用户,客户端或其他任何表相关的帐户。
由于原因,而不是我的理由,我无法改变这些表格或他们的工作方式"。
我需要做的是,从其他表中使用username
或company_name
检索帐户信息,我需要在一个查询中执行此操作,以便我可以使用{{1过滤,或WHERE
和ORDER BY
。至少我认为我需要在一个查询中这样做。
这将是完美的输出:
LIMIT
那我怎么办呢?我不知道我将要执行哪些表account_id | account_owner
1 | abc
2 | some_name
或我需要什么列名称,以为在进行查询之前我可以通过PHP了解它。
如果正确的方法是另一种,那么改变所有表方案的解决方案也将受到赞赏。
答案 0 :(得分:1)
基于@knowledge ...回答我做了这个查询,它的工作原理与我需要的一样。
SELECT AR.account_id,COALESCE(U.username, C.company_name) AS account_owner
FROM accounts AS A
INNER JOIN acc_rel AS AR ON A.id = AR.account_id
LEFT JOIN users AS U ON U.id = AR.target_id AND AR.target_table = 'users'
LEFT JOIN clients AS C ON C.id = AR.target_id AND AR.target_table = 'clients'
如果我需要添加新表,那么维护是很痛苦的,但是它可以按我需要的方式工作。
答案 1 :(得分:0)
select AR.account_id,COALESCE(U.username,C.company_name) as account_owner
from accounts A
join acc_rel AR on A.id=AR.account_id
left join users U on U.id=AR.traget_id and AR.target_table='user'
left join clients C on C.id=AR.traget_id and AR.target_table='clients'