+ -
当前位置:首页 → 问答吧 → Mysql查询三张表中指定列的数据~在线等。。

Mysql查询三张表中指定列的数据~在线等。。

时间:2011-11-18

来源:互联网

题目:
我们用的mysql 现在要查询三张表 返回三张表里面的指定的几列 然后把数据在页面上显示出来 
接着在页面用其他搜索条件查询的时候 再在取出来的数据基础上再进行筛选


求查询三张表中指定几列的SQL语句

作者: zthsn   发布时间: 2011-11-18

表A的 ID,NUMBER,PRICE,ORDER_TIME,STATUS
表B的 USER_ID,STARTIME,STOPTIME,
表C的 CHANNEL_PAY
表D的 COMPANY
其中表A的COMPANY_ID=表B的COMPANY_ID=表C的 COMPANY_ID=表D的UID

SELECT
A.ID,
A.NUMBER,
A.PRICE,
A.ORDER_TIME,
B.USER_ID,
B.STARTIME,
B.STOPTIME,
C.CHANNEL_PAY,
D.COMPANY
FROM
D表 D
LEFT JOIN A表 A ON A.COMPANY_ID = D.UID
LEFT JOIN B表 B ON B.COMPANY_ID = D.UID
LEFT JOIN C表 C ON C.COMPANY_ID = D.UID

有条件的再加行:
WHERE ..........
排序(如A表的ID由大到小排):
ORDER BY A.ID DESC

作者: taomanman   发布时间: 2011-11-18

引用 1 楼 taomanman 的回复:
表A的 ID,NUMBER,PRICE,ORDER_TIME,STATUS
表B的 USER_ID,STARTIME,STOPTIME,
表C的 CHANNEL_PAY
表D的 COMPANY
其中表A的COMPANY_ID=表B的COMPANY_ID=表C的 COMPANY_ID=表D的UID

SELECT
A.ID,
A.NUMBER,
A.PRICE,
A.ORDER_……

其中表A的COMPANY_ID=表B的COMPANY_ID=表C的 COMPANY_ID=表D的UID
这句话什么意思啊?求解
本人菜鸟一只。。。。

作者: zthsn   发布时间: 2011-11-18

我那个三张表是没有关联的啊

从三张表中取出我需要的几列的所有数据,

作者: zthsn   发布时间: 2011-11-18

贴建表及插入记录的SQL,及要求结果出来看看
5-10条记录即可

作者: WWWWA   发布时间: 2011-11-18

1L正解

作者: jiaweiqq123   发布时间: 2011-11-18

引用 3 楼 zthsn 的回复:
我那个三张表是没有关联的啊

从三张表中取出我需要的几列的所有数据,

没有关联的话,只有取笛卡尔积了
select a.f1,b.f2,c.f3 from a,b,c where ....

作者: WWWWA   发布时间: 2011-11-18

引用 3 楼 zthsn 的回复:

我那个三张表是没有关联的啊

从三张表中取出我需要的几列的所有数据,

你还是把你的那几张表结构,放上来吧,你要显示哪几个也写出来。

作者: taomanman   发布时间: 2011-11-18

select table1.col1,table1.col2,
table2.col11,table2.col22,
table3.col31,table1.col23
from table1 ,table2,table3
where table1.id=table2.id and table2.id2=table3.id2
and ...

作者: ACMAIN_CHM   发布时间: 2011-11-18

引用 7 楼 taomanman 的回复:
引用 3 楼 zthsn 的回复:

我那个三张表是没有关联的啊

从三张表中取出我需要的几列的所有数据,

你还是把你的那几张表结构,放上来吧,你要显示哪几个也写出来。

就任意三张没有关联的表

作者: zthsn   发布时间: 2011-11-18

引用 9 楼 zthsn 的回复:
引用 7 楼 taomanman 的回复:
引用 3 楼 zthsn 的回复:

我那个三张表是没有关联的啊

从三张表中取出我需要的几列的所有数据,

你还是把你的那几张表结构,放上来吧,你要显示哪几个也写出来。

就任意三张没有关联的表

没有关联的话,只有取笛卡尔积了
select a.f1,b.f2,c.f3 from a,b,c where ....

作者: WWWWA   发布时间: 2011-11-18

引用 8 楼 acmain_chm 的回复:
select table1.col1,table1.col2,
table2.col11,table2.col22,
table3.col31,table1.col23
from table1 ,table2,table3
where table1.id=table2.id and table2.id2=table3.id2
and ...

以后再这个结果集的基础上再进行筛选的话 索引怎么加呢??

作者: zthsn   发布时间: 2011-11-18

引用 11 楼 zthsn 的回复:
引用 8 楼 acmain_chm 的回复:
select table1.col1,table1.col2,
table2.col11,table2.col22,
table3.col31,table1.col23
from table1 ,table2,table3
where table1.id=table2.id and table2.id2=table3.id2
and ...……

索引要根据相应的SQL语句来增删,一般是在连接字段、WHERE 字段上建立索引

作者: WWWWA   发布时间: 2011-11-18

引用 12 楼 wwwwa 的回复:
引用 11 楼 zthsn 的回复:
引用 8 楼 acmain_chm 的回复:
select table1.col1,table1.col2,
table2.col11,table2.col22,
table3.col31,table1.col23
from table1 ,table2,table3
where table1.id=table2.id and table2.id2……

后面的where是任意六个条件的组合

作者: zthsn   发布时间: 2011-11-18

建议
贴建表及插入记录的SQL,及要求结果出来看看
5-10条记录即可

后面的where是任意六个条件的组合:相应条件中用到的字段分别建立索引 OR 建立复合索引

作者: WWWWA   发布时间: 2011-11-18

引用以后再这个结果集的基础上再进行筛选的话 索引怎么加呢??

索引只能加在表上,不能加在结果集上。

要根据你表中的数据情况和你实际的查询语句来决定加哪些索引,怎么加。

作者: ACMAIN_CHM   发布时间: 2011-11-18

引用后面的where是任意六个条件的组合


什么样的六个条件? 如果是三个表中的各两个字段。 则考虑创建

create index x11 on table1 (id,col1);
create index x12 on table1 (id,col2);
create index x21 on table2 (id,col1);
create index x22 on table2 (id,col2);
create index x31 on table3 (id,col1);
create index x32 on table3 (id,col2);

作者: ACMAIN_CHM   发布时间: 2011-11-18