标签: cross-join

多个联接表上的聚合函数

我有三张桌子:

CREATE TABLE foo (
    id bigint PRIMARY KEY,
    name text NOT NULL
);

CREATE TABLE foo_bar (
    id bigint PRIMARY KEY,
    foo_id bigint NOT NULL
);

CREATE TABLE tag (
    name text NOT NULL,
    target_id bigint NOT NULL,
    PRIMARY KEY (name, target_id)
);
Run Code Online (Sandbox Code Playgroud)

我试图创建一个视图,使得我得到的所有表的字段foo,项目的数量foo_bar,其中foo.id = foo_bar.foo_id,所有的标签,其中的文字阵列foo.id = tag.target_id.如果我们有:

INSERT INTO foo VALUES (1, 'one');
INSERT INTO foo VALUES (2, 'two');
INSERT INTO foo_bar VALUES (1, 1);
INSERT INTO foo_bar VALUES (2, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql aggregate-functions left-join cross-join

2
推荐指数
1
解决办法
8468
查看次数

更快的 CROSS JOIN 替代方案 - PostgreSQL

我正在尝试交叉联接两个表(客户和项目),这样我就可以创建按客户按项目的销售报告。我有 2000 个客户和 2000 个商品。

SELECT customer_name FROM customers; --Takes 100ms

SELECT item_number FROM items; --Takes 50ms

SELECT customer_name, item_number FROM customers CROSS JOIN items; Takes 200000ms

我知道这是 400 万行,但是有可能让它运行得更快吗?我想最终将其与这样的销售表结合起来:

SELECT customer_name, item_number, sales_total FROM customers CROSS JOIN items LEFT JOIN sales ON (customer.customer_name = sales.customer_name, item.item_number=sales.item_number);

销售表显然不会包含所有客户或所有商品,因此这里的目标是有一个报告,显示所有客户和所有商品以及已售出和未售出的商品。

我正在使用 PostgreSQL 8.4

postgresql cross-join

1
推荐指数
1
解决办法
9970
查看次数

交叉连接后跟左连接

是否可以在2个表之间进行CROSS JOIN,然后将LEFT JOIN连接到第3个表,然后可能还有更多的左连接?我使用的是SQL Server 2000/2005.

我正在运行以下查询,这是非常简单的转发IMO,但我收到一个错误.

select  P.PeriodID,
        P.PeriodQuarter,
        P.PeriodYear,
        M.Name,
        M.AuditTypeId,
        A.AuditId
from Period P, Member M

LEFT JOIN Audits A 
ON P.PeriodId = A.PeriodId

WHERE 
    P.PeriodID > 29 AND P.PeriodID < 38
    AND M.AuditTypeId in (1,2,3,4)
order by M.Name
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

消息4104,级别16,状态1,行1无法绑定多部分标识符"P.PeriodId".

如果我删除LEFT JOIN,查询将起作用.但是,我需要LEFT JOIN,因为我需要从其他表中提取更多信息.

我究竟做错了什么?有更好的方法吗?

sql-server left-join cross-join

1
推荐指数
2
解决办法
6297
查看次数

SQL CROSS JOIN问题

我的SQL查询遇到了一些麻烦.

我有两张桌子:

表格1

id  guid  title     D0      D1     D2
-----------------------------------------
1   guid1 Title1    0.123  -0.235  0.789
2   guid2 Title2   -0.343   0.435  0.459
3   guid3 Title3    0.243  -0.267 -0.934
...
100 guid4 Title100 -0.423   0.955  0.029
Run Code Online (Sandbox Code Playgroud)

和表2(注意它具有相同的模式,只是不同的数据).

id  guid  title     D0      D1     D2
----------------------------------------
1   guid1 Title1    0.233  -0.436 -0.389
2   guid2 Title2   -0.343   0.235  0.789
3   guid3 Title3    0.573  -0.067 -0.124
...
100 guid4 Title100 -0.343   0.155  0.005
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚如何编写一个SELECT语句,返回所有标题的WHERE所有组合ABS(Table1_D0*Table2_D0)+ABS(Table1_D1*Table2_D1)+ABS(Table1_D2*Table2_D2)都小于一个阈值(可能是硬编码).

到目前为止,我正在尝试使用a CROSS JOIN,但我不确定这是否是正确的方法.

这有意义吗? …

.net c# sql sql-server cross-join

1
推荐指数
1
解决办法
660
查看次数

BigQuery相互之间的连接速度更快

我正在尝试按日期查看用户活动。第一步是使用交叉连接和where子句,创建自创建用户帐户以来每天的表格。我的第一次尝试是:

SELECT
  u.user_id as user_id,
  date(u.created) as signup_date,
  cal.date as date,

from rsdw.user u
  cross join (select date(dt) as date from [rsdw.calendar] where date(dt) < CURRENT_DATE() ) cal
where
  date(u.created) <= cal.date
Run Code Online (Sandbox Code Playgroud)

(日历表只是2006年以来所有日期的列表(3288行)。用户表有约100万行。)

这个查询要花很长时间……太久了,以至于我在1000秒钟左右就放弃了它。我试着稍微调整查询。如果我向交叉联接添加“每个”:

SELECT
  u.user_id as user_id,
  date(u.created) as signup_date,
  cal.date as date,

from rsdw.user u
  cross join each (select date(dt) as date from [rsdw.calendar] where date(dt) < CURRENT_DATE() ) cal
where
  date(u.created) <= cal.date
Run Code Online (Sandbox Code Playgroud)

我得到一个错误:

Error: Cannot CROSS JOIN two tables with EACH qualifiers.
Run Code Online (Sandbox Code Playgroud)

最后,如果我保留“每个”但交换表,则只需90秒钟即可完成!

SELECT
  u.user_id as …
Run Code Online (Sandbox Code Playgroud)

cross-join google-bigquery

1
推荐指数
1
解决办法
1978
查看次数

创建所有交叉组合,尊重列层次结构

从我的data.table DT.in,我想创建所有交叉连接组合,但不仅CJ(_all_my_var_).

我需要执行这样的事情:

CJ(var1)
CJ(var1, var2)
CJ(var1, var2, var3)
...
Run Code Online (Sandbox Code Playgroud)

这是我的代表:

library(data.table)
set.seed(999)

DT.in <- data.table(lvl1 = rep('AA', 200),
                 code = sample(c('D44', 'J21'), 200, replace = TRUE),
                 var = sample(c('Z3R', 'TR5', 'JKL', 'FR5', 'TFX'), 200, replace = TRUE),
                 test = sample(c('ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN'), 200, replace = TRUE))

foo.1 <- DT.in[, .(new = CJ(lvl1, unique = TRUE))]
foo.2 <- DT.in[, .(new = CJ(lvl1, code, unique = TRUE))]
foo.3 <- DT.in[, .(new = CJ(lvl1, …
Run Code Online (Sandbox Code Playgroud)

r cross-join data.table

1
推荐指数
1
解决办法
48
查看次数

排列和组合

我有一张桌子,只有一列由5种颜色组成 -

colour
-------
red
black
white
green 
orange
Run Code Online (Sandbox Code Playgroud)

我希望得到所有的组合

(红色,橙色)(黑色,白色)...等等除了相同的那些.我试图与自己交叉加入表.

select * 
from table1 cross join table1
Run Code Online (Sandbox Code Playgroud)

但我没有得到所需的答案.它返回了所有的组合.也是相同的那些.我能得到它吗?有没有其他方法可以做到这一点而不创建另一个表???

sql combinations permutation cross-join

0
推荐指数
1
解决办法
2829
查看次数

在SQL Server中加入两个没有关系的计数(*)表

我试图将count(*)语句和count(*)的结果与SQL Server Table上的where子句组合成一个表.

我有一个联合声明,将两个查询集中在一起.

SELECT count(*) FROM [dbo].asma a
where [MLR] in ('y')) l
union
SELECT count (*) as 'Total' FROM [dbo].asma]
Run Code Online (Sandbox Code Playgroud)

联盟回归

我看过这个解决方案的帖子,但无法拼凑出能够并排展示这些问题的解决方案.你会怎么做?

我需要的是这个输出:

在此输入图像描述

sql sql-server count cross-join

0
推荐指数
1
解决办法
71
查看次数

如何在一个查询中使用内连接和交叉连接?

我有一个任务是编写一个使用单个内连接和交叉连接的查询.我已经写过的应该返回相同结果的查询如下所示:

SELECT T.PRICE, S.ROW, S.NUMBER, M.TITLE  
FROM 
[cinema_no_keys].[dbo].[TICKET] T cross join 
[cinema_no_keys].[dbo].[MOVIE] M cross join 
[cinema_no_keys].[dbo].[SEAT] S cross join 
[cinema_no_keys].[dbo].[SHOW] SH
WHERE
T.ID_SEAT = S.ID_SEAT AND
M.ID_MOVIE = SH.ID_MOVIE AND
SH.DATE_HOUR = T.DATE_HOUR
Run Code Online (Sandbox Code Playgroud)

sql join inner-join cross-join

-3
推荐指数
1
解决办法
4006
查看次数