我对SQL有些陌生,所以我仍在努力学习一些简单的东西。
现在,我的应用程序上有多个表,用于不同级别的访问(客户、代表、经理)。
用户名不能在这些表之间共享。我遇到的问题是试图根据用户名选择users行。
如果只有一个表供用户使用,我很容易知道如何做到这一点,但我真的不知道如何同时搜索多个表。
此外,如果找到用户名,是否有方法返回找到该用户名的表的名称?
非常感谢!
可能只需要一个简单的UNION
SELECT 'table1' as tab, c1, c2, c3 FROM table1 WHERE uid='xxx'
UNION
SELECT 'table2' as tab, c1, c2, c3 FROM table2 WHERE uid='xxx'
UNION
SELECT 'table3' as tab, c1, c2, c3 FROM table3 WHERE uid='xxx'
由于您将只返回一行,因此用户xxx
只能存在于其中一个表中,您将获得感兴趣的所有列以及包含表名的第一列
假设所有表的布局都相同:
SELECT *
FROM (
SELECT 'customers' tn, *
FROM customers
UNION ALL
SELECT 'managers' tn, *
FROM managers
UNION ALL
SELECT 'representatives' tn, *
FROM representatives
) q
WHERE username = @myusername