Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
Join 交叉连接忽略where子句_Join_Where Clause_Ignore_Cross Join - Fatal编程技术网

Join 交叉连接忽略where子句

Join 交叉连接忽略where子句,join,where-clause,ignore,cross-join,Join,Where Clause,Ignore,Cross Join,表:购物 shop_id shop_building shop_person shop_time 1 1 Brian 40 2 2 Brian 31 3 1 Tom 20 4 3 Brian 30 表:建筑物 building_id building_city 1 London 2 Newcastle 3 London 4 London 表:香蕉 banana_id banana_building ban

表:购物

shop_id shop_building shop_person  shop_time
1   1   Brian   40
2   2   Brian   31
3   1   Tom    20
4   3   Brian   30
表:建筑物

building_id building_city
1     London
2     Newcastle 
3     London
4     London
表:香蕉

banana_id  banana_building banana_amount  banana_person
1      2     1      Brian
2      3     1       Brian
2      1     1      Tom
我现在想让它告诉我每个人在伦敦买了多少香蕉

我使用了以下代码:

SELECT tt.*, tu.*, tz.*,
           SUM(shop_time)           AS shoptime, 
           Ifnull(banana_amount, 0) AS bananas 
    INNER JOIN buildings tu ON tt.shop_building=tu.building_id
    FROM   shopping tt 
           LEFT OUTER JOIN (SELECT banana_person, banana_building,
                                   SUM(banana_amount) AS banana_amount 
                            FROM   bananas 
                            GROUP  BY banana_person) tz 
             ON tt.shop_person = tz.banana_person AND tt.shop_building = tz.banana_building
 WHERE tu.building_city = 'London'
    GROUP  BY shop_person; 
但它不起作用。就好像我告诉它太晚了,它应该只在伦敦看,因为它忽略了这一点。

试着这样做:

SELECT 
    s.shop_person, sum(b.banana_amount) as Amt, , sum(shop_time) as TimeAmt
FROM bananas b
    INNER JOIN buildings bu ON b.banana_building = bu.building_id
    INNER JOIN shopping s ON bu.building_id = s.shop_building
WHERE
    bu.building_city = N'London'
GROUP BY s.shop_person
这个查询是不同的,但它可以满足您的需求——“每个人在伦敦购买的香蕉数量”

请尝试以下方法:

SELECT 
    s.shop_person, sum(b.banana_amount) as Amt, , sum(shop_time) as TimeAmt
FROM bananas b
    INNER JOIN buildings bu ON b.banana_building = bu.building_id
    INNER JOIN shopping s ON bu.building_id = s.shop_building
WHERE
    bu.building_city = N'London'
GROUP BY s.shop_person

这个查询是不同的,但它可以满足您的需求——“每个人在伦敦购买的香蕉数量”

在不知道您使用的是什么数据库的情况下,这里是mssql的工作版本。 实际上,我重新构建了表以确保它是正确的

对于其他数据库系统,您可能必须在SELECT语句中使用除
ISNULL
之外的其他函数

SELECT tt.shop_person,
    tt.shop_building,
    SUM(tt.shop_time) AS shoptime,
    ISNULL(SUM(tz.banana_amount), 0) AS bananas
FROM dbo.shopping tt
INNER JOIN dbo.buildings tu ON tt.shop_building = tu.building_id
LEFT OUTER JOIN
    (SELECT banana_person, banana_building, SUM(banana_amount) AS banana_amount
        FROM bananas
        GROUP BY banana_person, banana_building) tz
    ON tt.shop_person = tz.banana_person AND tt.shop_building = tz.banana_building
WHERE (tu.building_city = 'London')
GROUP BY tt.shop_person, tt.shop_building
我必须在
tz.banana\u amount
周围添加一个聚合函数-哪一个(SUM、MIN、MAX)不重要

结果:

shop_person shop_building shoptime bananas
Brian       1             40       0
Tom         1             20       1
Brian       3             30       1

我在
香蕉
等中使用了不同的数量,它工作正常。

在不知道您使用的数据库的情况下,这里是mssql的工作版本。 实际上,我重新构建了表以确保它是正确的

对于其他数据库系统,您可能必须在SELECT语句中使用除
ISNULL
之外的其他函数

SELECT tt.shop_person,
    tt.shop_building,
    SUM(tt.shop_time) AS shoptime,
    ISNULL(SUM(tz.banana_amount), 0) AS bananas
FROM dbo.shopping tt
INNER JOIN dbo.buildings tu ON tt.shop_building = tu.building_id
LEFT OUTER JOIN
    (SELECT banana_person, banana_building, SUM(banana_amount) AS banana_amount
        FROM bananas
        GROUP BY banana_person, banana_building) tz
    ON tt.shop_person = tz.banana_person AND tt.shop_building = tz.banana_building
WHERE (tu.building_city = 'London')
GROUP BY tt.shop_person, tt.shop_building
我必须在
tz.banana\u amount
周围添加一个聚合函数-哪一个(SUM、MIN、MAX)不重要

结果:

shop_person shop_building shoptime bananas
Brian       1             40       0
Tom         1             20       1
Brian       3             30       1

我在
香蕉
等中使用了不同的数量,它工作正常。

恐怕没有运气,它仍然会忽略它并计算香蕉表中的所有内容。提到的查询对你来说可以吗?恐怕不行,因为我需要代码与我在OP中发布的代码非常相似,如果可能的话(原因:)Hmmmm。。。所以,请定义你想看到的查询。恐怕运气不好,它仍然会忽略它并计算香蕉表中的所有内容。提到的查询对你来说可以吗?恐怕不行,因为我需要代码与我在OP中发布的代码非常相似,如果可能的话(原因:)嗯。。。所以,请定义你想看到的查询。编辑了我的第一篇文章。不过,恐怕我也需要购物表,因此代码必须看起来非常类似于我在第一篇文章中的代码(原因:),实际上,我不会在带有group by子句的查询中包含任何*作为select参数。你所说的“漂亮”是什么意思?顺便说一句,子查询tz仍然缺少香蕉建筑柱。我的意思是,它显然不应该与我的代码完全相同,因为我的代码不起作用。但如果可能的话,它需要尽可能靠近。这次正确编辑:)它不完全相同-您的子查询的group by子句中仍然没有banana_building。编辑了我的第一篇文章。不过,恐怕我也需要购物表,因此代码必须看起来非常类似于我在第一篇文章中的代码(原因:),实际上,我不会在带有group by子句的查询中包含任何*作为select参数。你所说的“漂亮”是什么意思?顺便说一句,子查询tz仍然缺少香蕉建筑柱。我的意思是,它显然不应该与我的代码完全相同,因为我的代码不起作用。但如果可能的话,它需要尽可能靠近。这次正确编辑:)它不完全相同-您的子查询的GROUPBY子句中仍然没有banana_building。