【问题标题】:How to select * from three tables?如何从三个表中选择 *?
【发布时间】:2016-08-11 06:16:07
【问题描述】:

我有三张桌子场地、服务和供应商详细信息。我想从所有表中获取所有列。

我尝试加入两个表,但我得到 1 条记录 3 次,得到重复记录。

查询:

SELECT venues.venueId,venues.venue_name,venues.latitude,venues.longitude,venues.active,services.serviceId,services.service_name,services.latitude,services.longitude,services.active FROM `venues`,`services` WHERE venues.vendorId = services.vendorId

记录:

venueId
venue_name
latitude
longitude
active
serviceId
service_name
latitude
longitude
active
4
siddhi hall
-2.8437453
23.3823545
1
1
DJ siddhi
1211
4545
1
4
siddhi hall
-2.8437453
23.3823545
1
2
siddhi  cateror
0
0
1
4
siddhi hall
-2.8437453
23.3823545
1
3
flowerist
-10.4212157
28.6031842
1
5
siddhi cafe
0
0
1
1
DJ siddhi
1211
4545
1
5
siddhi cafe
0
0
1
2
siddhi  cateror
0
0
1
5
siddhi cafe
0
0
1
3
flowerist
-10.4212157
28.6031842
1
6
siddhi cafe
-1.899681
22.72851
1
1
DJ siddhi
1211
4545
1
6
siddhi cafe
-1.899681
22.72851
1
2
siddhi  cateror
0
0
1
6
siddhi cafe
-1.899681
22.72851
1
3
flowerist
-10.4212157
28.6031842
1
7
green lawn
-10.4212157
28.6031842
1
1
DJ siddhi
1211
4545
1
7
green lawn
-10.4212157
28.6031842
1
2
siddhi  cateror
0
0
1
7
green lawn
-10.4212157
28.6031842
1
3
flowerist
-10.4212157
28.6031842
1
8
hotel nashik
-2.6357434
18.4276047
1
1
DJ siddhi
1211
4545
1
8
hotel nashik
-2.6357434
18.4276047
1
2
siddhi  cateror
0
0
1
8
hotel nashik
-2.6357434
18.4276047
1
3
flowerist
-10.4212157
28.6031842
1

场地表:

    Name               Type     
1   venueId            Primary  int(11)         
2   venue_name         varchar(255) 
3   venuetypeId        int(11)          
4   entry_by           varchar(255) 
5   venue_address      varchar(255) 
6   latitude           double           
7   longitude          double           
8   active             int(11)          
9   vendorId           int(11)  

服务:

    Name                  Type   
1   serviceIdPrimary      int(11)           
2   entry_by              varchar(255)  
3   service_name          varchar(255)  
4   service_address       varchar(255)  
5   latitude              double            
6   longitude             double            
7   servicetypeId         int(11)       
8   active                int(11)           
9   vendorId              int(11)

供应商详情:

    Name             Type   
1   vendorIdPrimary  int(11)            
2   username         varchar(30)    
3   vendorName       varchar(255)   
4   password         varchar(200)   
5   active           int(1)         
7   vendorCountry    varchar(100)   
8   vendorState      varchar(100)   
9   vendorCity       varchar(100)   
10  vendorLocality   varchar(200)   
11  vendorArea       varchar(200)   
12  vendorAddress    text   
13  vendorPincode    varchar(200)   
14  emailId          varchar(255)   
15  mobileno         varchar(15)    
16  phoneno          varchar(15)    
17  logo1            varchar(100)   
18  logo2   varchar(100)    
19  logo3   varchar(100)    
20  venueId int(11)         
21  entry_by    varchar(20) 
22  entry_date  varchar(20) 
23  entry_time  varchar(20) 
24  last_modify_date    varchar(20) 
25  ip_addr varchar(20) latin1_swedish_ci       
26  deviceToken varchar(200)    

我怎样才能得到这个?谢谢你。。

【问题讨论】:

  • 你想在结果集中做什么?供应商的所有服务?
  • 是的,供应商的所有服务和场所以及供应商详细信息、供应商编号、地址、名称。 @AlokPatel
  • venuesservices 没有直接相互连接。所以你结合了只有供应商的结果和它的服务。如果您在vendorsvenues 上添加join,则会导致重复结果,因为一个供应商可能有多个场所并可能提供多种服务。
  • 我想搜索供应商的场所和服务。你的选择也很好。然后我必须创建两个不同的 API 来获取供应商的场地和服务。你能提出一个查询吗?@AlokPatel

标签: mysql database join relational-database


【解决方案1】:

早安!

如果您真的想从所有三个表中获取所有列,您只需选择其中的*

SELECT * FROM table1, table2, table3;

根据表的不同,请求所有列可能需要更长的时间。

【讨论】:

  • 我得到了重复的记录。@Otterbein
  • 您将所有表中的所有列放在一起。当您有两个具有相同列名称的表时,您将得到它们的名称相同。为避免这种情况,您必须一一选择它们并给它们起别名,例如SELECT column1 AS alias_name, ... FROM ...
【解决方案2】:
select *
from
    tableA a
        inner join
    tableB b
        on a.common = b.common
        inner join 
    TableC c
        on b.common = c.common

您必须在这三个表中定义公共列。

【讨论】:

    【解决方案3】:

    请试试这个

    SELECT * FROM venues INNER JOIN services USING(vendor_Id);
    

    至少对于您的 2 个表,只要您的表中有完全相同的列名,它就适用于 3 个或更多 ofc。但我不确定您是否只是在问题中错误格式化了表格,或者您的供应商 ID 确实是 vendorIdPrimary

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多