Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用JOIN检索所有条目?_Mysql_Sql_Join_Union - Fatal编程技术网

Mysql 如何使用JOIN检索所有条目?

Mysql 如何使用JOIN检索所有条目?,mysql,sql,join,union,Mysql,Sql,Join,Union,我的问题是: enter code here 我有一个名为test的表,看起来像这样 id| service | sub service | Qt | date 1 | service_1 | sub_service_11 | 3 | 2011-12-03 2 | service_1 | sub_service_12 | 6 | 2011-12-03 3 | service_1 | sub_service_13 | 4 | 2011-12-03 id| da

我的问题是:

enter code here
我有一个名为test的表,看起来像这样

id|  service  |   sub service  | Qt  |   date

1 | service_1 | sub_service_11 |  3  | 2011-12-03
2 | service_1 | sub_service_12 |  6  | 2011-12-03
3 | service_1 | sub_service_13 |  4  | 2011-12-03
id|   date 

1 | 2011-12-01
2 | 2011-12-02
3 | 2011-12-03
4 | 2011-12-04
5 | 2011-12-05
后来,我有一张名为datedim的桌子,看起来像这样

id|  service  |   sub service  | Qt  |   date

1 | service_1 | sub_service_11 |  3  | 2011-12-03
2 | service_1 | sub_service_12 |  6  | 2011-12-03
3 | service_1 | sub_service_13 |  4  | 2011-12-03
id|   date 

1 | 2011-12-01
2 | 2011-12-02
3 | 2011-12-03
4 | 2011-12-04
5 | 2011-12-05
我想做的是,对于每个sub_服务,即使没有匹配项,也要从datedim返回所有日期

基本上是这样的

sub_service_11 | 2011-12-01 | NULL
sub_service_11 | 2011-12-02 | NULL
sub_service_11 | 2011-12-03 | 3
sub_service_11 | 2011-12-04 | NULL
sub_service_11 | 2011-12-05 | NULL
sub_service_12 | 2011-12-01 | NULL
sub_service_12 | 2011-12-02 | NULL
sub_service_12 | 2011-12-03 | 6
sub_service_12 | 2011-12-04 | NULL
sub_service_12 | 2011-12-05 | NULL
sub_service_13 | 2011-12-01 | NULL
sub_service_13 | 2011-12-02 | NULL
sub_service_13 | 2011-12-03 | 4
sub_service_13 | 2011-12-04 | NULL
sub_service_13 | 2011-12-05 | NULL
我确实试过加入工会之类的组织,但我想不出来

有人知道我怎样才能做到吗

谢谢,

这是您需要的:

select 
  ss.sub_service, 
  dd.date,
  ts.qt
from 
  (datedim dd, (select distinct sub_service from test) ss)
 left join test ts on (dd.date = ts.date and ts.sub_service = ss.sub_service)
order by ss.sub_service, dd.date

由于您有一个包含每个sub_服务的表(我们称之为sub_服务列表),您应该能够执行以下操作:

SELECT
s.sub_service, d.date, t.Qt
FROM (sub_service_list s,datedim d) 
LEFT JOIN test t ON s.sub_service=t.sub_service AND d.date=t.date
您可以这样做:

select t.id, sub_service, case when d.date = t.date then qt else null end as qt
from test t cross join datedim d 
order by sub_service, d.date

您是否有一个表列出了所有可能的子_服务,还是只有“不同于测试的子_服务”?我有一个表包含子_服务列表。我没有想到我可以加入它两次,一次是sub_服务,一次是datedim。一旦你在测试中添加另一个日期(例如sub_服务11,2011-12-04),这将为sub_服务生成重复的日期。@Adrian非常感谢,我将永远不会找到这个解决方案。非常感谢您的帮助。>在MySQL中,交叉连接在语法上等同于内部连接(它们可以相互替换),这并不能解决OPs问题。。。你还是要测试这个查询吗?只是想知道我是否工作是的,我做了。输出不是OP想要的