![](/img/trans.png)
[英]Selecting a mysql row from one table based on select statement in another
[英]Using row values from one table to determine fields to select from another table in MySQL
我在MySQL数据库中有多个表,我希望能够将一个表中的行值用作从另一表中选择的列。 例如,假设我的表description
和information
如下:
-------------
| description |
-------------
id colalias privacy
-- -------- -------
1 fname 3
2 lname 3
3 salary 2
4 empid 1
-------------
| information |
-------------
id fname lname salary empid
-- ----- ----- ------ -----
1 Bob White 50000 12345
2 Tom Black 75000 54321
3 Sue Green 82000 67890
4 Ann Brown 63000 09876
假设我想返回一个表,该表从description.privacy
等于3的information
中提取所有数据。因此,我希望输出为
fname lname
----- -----
Bob White
Tom Black
Sue Green
Ann Brown
因为只有fname
和lname
字段具有该隐私级别。 我不是编写SQL查询的专家,并且无法控制现有的数据库设计。 如果这是一件显而易见的事情,我对此深表歉意,但我将不胜感激。
更新-新答案
在@Brian评论之后,我已经意识到,根据下面的评论,mySQL subquery
可能会成功完成,使您可以基于先前的结果进行查询。
RoseIndia.net上有关于它们的相当不错的概述,它将为您提供一个良好的开端。
老答案
您最有可能希望通过LEFT JOIN
实现这一目标。
我假设id
列彼此相关。 就我个人而言,我将有2个单独的主键,然后使用外键将1个表与另一个表相关联,然后继续。
我建议您查看KeithJBrown.co.uk ,其中提供了很好的解释以及一些不同类型的联接的良好示例。
最后,仅获取所需的列,只需在SQL语句中将它们指定为SELECT information.fname, information.lname
。
我希望这可以帮助您走上正确的道路,并且下次下次与Google进行一些研究时,请尝试一些尝试,然后在遇到困难时寻求帮助。
实际上,您的数据模型确实阻碍了您的工作,隐私级别和数据之间的链接最好仅通过数据在表中建模,而不是将数据 (隐私级别)链接到结构 (字段名称)。
你是否有在所有范围内的任何改变数据模型,即使只是在新添加的东西(即不改变/删除现有模型)?
您正在尝试的事情并非不可能,但这会更加艰巨。
编辑-使用动态SQL的快速示例:
http://forums.mysql.com/read.php?60,27979,30437
编辑-一个数据模型示例将有所帮助,尽管它对您正在使用的模型有很大的重构,所以动态SQL路由可能更实用...
field_name field_security_level user_id user_emp_id field_value
---------- -------------------- ------- ----------- -----------
fname 3 1 12345 Bob
lname 3 1 12345 White
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.