Mysql 在sql查询中从另一个表引用表的名称
我有三张桌子 1主表-带列的组件-ID、组件的名称、ID 和2个组件表 第一个-带列的硬盘-ID,容量 第二个-带列的RAM-ID,速度 在主表中,我有组件的ID,其详细信息在表hardisk或RAM中。_组件的列名_选择硬盘或RAM,ID_组件从所选表中选择正确的详细信息 例如,让我们假设主表中是这一行 1,RAM,2 RAM表中有两行 1,2GB 2,4GB 我试过这样的东西Mysql 在sql查询中从另一个表引用表的名称,mysql,sql,mysql-workbench,oracle-sqldeveloper,Mysql,Sql,Mysql Workbench,Oracle Sqldeveloper,我有三张桌子 1主表-带列的组件-ID、组件的名称、ID 和2个组件表 第一个-带列的硬盘-ID,容量 第二个-带列的RAM-ID,速度 在主表中,我有组件的ID,其详细信息在表hardisk或RAM中。_组件的列名_选择硬盘或RAM,ID_组件从所选表中选择正确的详细信息 例如,让我们假设主表中是这一行 1,RAM,2 RAM表中有两行 1,2GB 2,4GB 我试过这样的东西 Select * from (Select name_of_component from Compo
Select *
from (Select name_of_component
from Component
where ID=1)
join Component on (Select name_of_component
from Component
where ID=1).ID = Component.ID_component
但它不起作用。所以,有没有办法,如何调用从另一个表中选择名称的表中的信息?我不能用一张表来显示RAM和图形卡的详细信息,因为它们有不同的详细信息。那我该怎么做呢
语法错误是
您输入的SQL语句包含无效的FROM子句。您不能在SQL本身中执行此操作。我想你可以做一个工会:
select * from ram join component on ram.id=component.id where component.name_of_component='RAM' and component.id=myid
union
select * from harddisk join component on ram.id=component.id where component.name_of_component='harddisk' and component.id=myid
由于_组件的名称_同时只能是这些值中的一个,因此联合的一部分将不返回任何值,而另一部分将返回正确的部分。
但这只有在两个表的列数相同时才能起作用。如果这两个表具有相似的布局,那么您可能不需要两个表。由于以下几个原因,您无法使用简单SQL实现所需的功能。最明显的是,SQL查询返回一组固定的列,这些列是在编写代码时定义的 绕过此限制的方法是使用预先准备好的语句,例如:
select @t = name_of_component
from MainTable
where id = 1;
select @sql = replace(replace('select * from @table where id = @i',
'@i', 1
), '@table', @t);
prepare stmt from @sql;
execute stmt;
另一种方法是使用左联接:
所需的值将位于相应的列中。你可以把它放在一个视图中
您可能会发现EAV实体属性值结构在为此目的表示此数据方面做得更好。主表将包含组件、id和类型。第二个表将列出所有组件的功能,行如下:
id attribute value
1 'RAM' '2GB'
2 'RAM' '4GB'
3 'Speed' '7kRPM'
你有语法错误,对吗?你应该加上这个。并决定使用哪种sql方言。mysql和sql server是不同的,我不相信你们的问题是关于这个查询在这两个引擎中是如何工作的……我不在乎答案是在mysql还是在Oracle中,我只需要一个答案:是的,对不起,我做了错误的标记。。。我编辑了它。。。他们现在没事了是的,我考虑过这样的事情,但我想按照我描述的方式尝试一下,因为如果我不会只有两个组件呢?但例如100?那么你必须为他们所有人做这个联合/您始终可以通过调用SQL的宿主语言来执行此操作:首先读取组件,然后使用正确的表名构建SQL。您也可以在一些rdbms中的存储过程中执行此操作,但我认为在mysql中不可以执行此操作,请参见。或者检查执行此操作的方法。
id attribute value
1 'RAM' '2GB'
2 'RAM' '4GB'
3 'Speed' '7kRPM'