我有三张桌子:
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) 我正在尝试交叉联接两个表(客户和项目),这样我就可以创建按客户按项目的销售报告。我有 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
是否可以在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查询遇到了一些麻烦.
我有两张桌子:
表格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,但我不确定这是否是正确的方法.
这有意义吗? …
我正在尝试按日期查看用户活动。第一步是使用交叉连接和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) 从我的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) 我有一张桌子,只有一列由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)
但我没有得到所需的答案.它返回了所有的组合.也是相同的那些.我能得到它吗?有没有其他方法可以做到这一点而不创建另一个表???
我试图将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)
我看过这个解决方案的帖子,但无法拼凑出能够并排展示这些问题的解决方案.你会怎么做?
我需要的是这个输出:
我有一个任务是编写一个使用单个内连接和交叉连接的查询.我已经写过的应该返回相同结果的查询如下所示:
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) cross-join ×9
sql ×5
sql-server ×3
left-join ×2
postgresql ×2
.net ×1
c# ×1
combinations ×1
count ×1
data.table ×1
inner-join ×1
join ×1
permutation ×1
r ×1