MySQL 连接表,其中表名是另一个表的字段
我有5张桌子。 1 个主要的和 4 个附加的(它们有不同的列)。
- 对象
- obj_mobiles
- obj_tablets
- obj_computers
这是我的主表(对象)的结构。
ID |类型 |名称 |等等...
所以我想做的是将对象与其他(obj_mobiles,obj_tablets,...)表连接起来,具体取决于类型字段。 我知道我应该使用动态 SQL。但我无法办理手续。我认为它应该看起来像这样。
SELECT objects.type into @tbl FROM objects;
PREPARE stmnt FROM "SELECT * FROM objects AS object LEFT JOIN @tbl AS info ON object.id = info.obj_id";
EXECUTE stmnt;
DEALLOCATE PREPARE stmnt;
Aslo 伪代码
SELECT * FROM objects LEFT JOIN [objects.type] ON ...
任何人都可以发布程序吗?另外我想要所有行而不仅仅是 1 行。 谢谢。
I have 5 tables. One primary and 4 additional (they have different columns).
- objects
- obj_mobiles
- obj_tablets
- obj_computers
Here is the structure of my main table (objects).
ID | type | name | etc...
So what I want to do is to join objects with other (obj_mobiles,obj_tablets,...) tables, depending on type field.
I know that I should use dynamic SQL. But I can't make procedure. I think it should look like something like this.
SELECT objects.type into @tbl FROM objects;
PREPARE stmnt FROM "SELECT * FROM objects AS object LEFT JOIN @tbl AS info ON object.id = info.obj_id";
EXECUTE stmnt;
DEALLOCATE PREPARE stmnt;
Aslo pseudo-code
SELECT * FROM objects LEFT JOIN [objects.type] ON ...
Can anyone post procedure? Also I want to have all rows not just 1 row.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您想要所有行(批量输出)而不是一次一行,那么下面的代码应该很快,并且所有行的输出将包含所有列。
让我们考虑下面的表字段。
obj_mobiles - ID | obj_mobiles M1 | M2
obj_tablets-ID | obj_tablets T1 | T2
obj_计算机- ID | C1 | C2
对象- ID |类型 |名称 |等等,
表格创建如下。
还要确认列的数据类型与原始列相同,结果将保存到表中并在下面检查数据类型。
If you want all rows (bulk output) and not one row at a time, the below should be fast and also the output for all rows will contain all columns.
Lets consider below to be the fields of the tables.
obj_mobiles - ID | M1 | M2
obj_tablets - ID | T1 | T2
obj_computers - ID | C1 | C2
objects - ID | type | name | etc.,
The table are create as below.
also to confirm the datatypes of the columns are same as the original columns, the result is saved into a table and datatypes are checked below.
如果
objects
是父表,则意味着objects
.ID
是唯一的对象。正确的?所有其他项目(手机、平板电脑、计算机)都是对象的子项目,并且手机和平板电脑不能具有相同的 ID。如果是这样,使用这个简单的查询就足够了 -添加 WHERE 子句来过滤类型,例如:WHERE o.type = 'mobile'。
If
objects
is a parent table it means thatobjects
.ID
is a unique object. Right? All other items (mobiles, tablets, computers) are child ones for object and mobile and tablet cannot have the same ID. If so, it is enough to use this simple query -Add WHERE clause to filter types, e.g.: WHERE o.type = 'mobile'.
使用 CONCAT 创建准备语句。
例如。
USE CONCAT to create your prepare statement.
eg.