Mysql 用sql连接多个表

Mysql 用sql连接多个表,mysql,sql,join,Mysql,Sql,Join,我想创建数据库的视图\事实上,我的数据库包含大约20个表,我想基于外键连接这些表,但是有一些重复的列。有没有简单快捷的方法 像这样加入时应该使用别名 Select E.Name , U.Name,E.Age,U.Age From TblEmployee E inner join TblUser U on E.EmployeeId = U.EmployeeId 注意:上面的查询只是一个示例,您可以继续 编辑:你也可以这样做你的列名 Select E.*

我想创建数据库的视图\事实上,我的数据库包含大约20个表,我想基于外键连接这些表,但是有一些重复的列。有没有简单快捷的方法

像这样加入时应该使用别名

   Select E.Name , U.Name,E.Age,U.Age
   From 
   TblEmployee E 
   inner join 
   TblUser U on E.EmployeeId = U.EmployeeId
注意:上面的查询只是一个示例,您可以继续

编辑:你也可以这样做你的列名

   Select E.* , U.*, E.Age as Employee Age ,U.Age as UserAge 
   /* you can specify some column by E.Name and if you do not want then simplye do E.* by doing thing every column of your that table will be selected */
   From TblEmployee E 
   inner join 
   TblUser U on E.EmployeeId = U.EmployeeId 

只需确定视图中需要哪些列,并将其用作为所有列指定特定名称

这是一个例子。两个表都有col1和col2:

MySQL 5.5.32架构设置:

问题1:

:


这里有一些可能有用的东西。如果你不想重复,你必须列出列。你可以跑

这将为您在一个长字符串中指定的表中的所有列列出[表名称].[列名称]。然后,您可以复制结果并将其粘贴到查询中的SELECT旁边,并删除所有重复列(如果您知道这些列)。此查询将显示有多个列的列,并显示表

select table_name, column_name 
from INFORMATION_SCHEMA.COLUMNS
where column_name in (
  select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS
  group by COLUMN_NAME 
  having count(1) > 1)
order by column_name

它仍然是手动的,但会为您节省一些时间。只需稍加努力,您就可以调整查询,使整个过程仅为一个查询,而不必手动删除任何内容。

某些重复列意味着什么?为什么这会使您的联接变得困难?我在许多表中有相同的列名,联接sql会输出重复的列,如果我想更改列的变量名,这将花费我一生的时间:?这是mysql、sqlserver、oracle等吗?我的意思是,有文本编辑器和查询分析器可以使这更容易做到。如果您要连接20个表,并且实际上需要所有表中的所有数据来进行查询,那么直接进行查询确实不是一种简单的方法,不。在一个查询中需要这么多数据的情况非常罕见。但是如果我想为我的数据库创建一个视图,该怎么办@BaconBitsbut如果我有20个表,每个表有10个属性,那么我必须写200个别名?请建议如果您有两个20表,我建议您使用alias。不,你只需要写20个别名。。。实际上,通过使用alias,可以避免表之间的歧义,而且我可以仅使用20个alias吗?我应该对所有属性都这样做吗?@JadDaoud您想在select查询中选择多少列?20个表的联接结果的所有列我喜欢您的答案,谢谢,但是如果有20个表,每个表有10个属性呢?:/@JadDaoud我添加了演示。这两个查询都可以安全运行,因为它们只在数据库上进行选择。我喜欢这样,但是在创建了select concat查询之后,如何访问属性?我应该再问一次吗?假设我要创建数据库的视图。。请注意,第一个查询的目的是列出所有以逗号分隔的table.column名称。然后,您可以编写select,但不必手动键入200列,只需复制并粘贴第一个查询的结果即可。因此,您仍然需要编写查询和联接,但不必手动键入所有列名\所以它应该是:从选择组中选择*,列名称分隔符,从信息模式中选择。列在哪里,表名称在哪里,学生在哪里,排班在哪里?不需要。只需运行第一个查询。将结果复制到记事本或其他东西上。编写包含所有20个表和联接的select语句。复制第一步的结果,并将其粘贴到select语句中,在该语句中指定列名。
SELECT Table1.Id as ID,
       Table1.Col1 as COL1,
       Table1.Col2 as COL2,
       Table2.Col1 as COL3,
       Table2.Col2 as COL4
FROM Table1
INNER JOIN Table2 ON Table1.Id2 = Table2.Id
| ID | COL1 | COL2 | COL3 | COL4 |
|----|------|------|------|------|
|  1 |    A |    B |    A |    B |
|  2 |    B |    C |    B |    C |
|  3 |    D |    E |    D |    E |
select group_concat(concat(table_name,'.', column_name) separator ', ') 
from information_schema.columns
where table_name in ('Students', 'ClassRoster');
select table_name, column_name 
from INFORMATION_SCHEMA.COLUMNS
where column_name in (
  select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS
  group by COLUMN_NAME 
  having count(1) > 1)
order by column_name