• 关于

    cross join

    的搜索结果

回答

MySQL 文档涵盖了该主题。 这是一个简介。使用join或时inner join,on条件是可选的。这与ANSI标准不同,并且与几乎所有其他数据库不同。效果是cross join。同样,您可以使用带有的on子句cross join,该子句也与标准SQL不同。 交叉联接将创建笛卡尔乘积-即,第一个表的第一行和第二个表的第一行的每种可能组合。具有三行('a','b'和'c')的表和具有四行(例如1、2、3、4)的表的交叉联接将具有12行。 实际上,如果要进行交叉联接,请使用cross join: from A cross join B 远胜于: from A, B 和: from A join B -- with no on clause on左右外部连接需要该子句,因此讨论与它们无关。 如果您需要了解联接的不同类型,则需要对关系数据库进行一些研究。在该级别的讨论中,Stackoverflow不合适。来源:stack overflow

保持可爱mmm 2020-05-13 13:47:55 0 浏览量 回答数 0

问题

Maxcompute 的SQL不支持cross join的操作, 我测试了“full outer join on 1=1 ” 也不支持,那我要实现两张表作笛卡尔关联该用什么方法实现?

祁同伟 2019-12-01 20:23:02 2197 浏览量 回答数 2

问题

MySQL 选择题 以下关于多表之间连接的方式说法错误的是( )

pandacats 2019-12-23 20:03:45 0 浏览量 回答数 1

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

回答

E和C先做笛卡尔积,然后再和其他关联。不知道mysql有CROSS JOIN 不:select * from e CROSS JOIN c on (e.name=c.name and e.e=c.c)

落地花开啦 2019-12-02 01:44:06 0 浏览量 回答数 0

问题

SQL Server的cross apply与inner join区别是什么?

吴孟桥 2019-12-01 20:00:13 1426 浏览量 回答数 2

问题

如何使用其他值之间的值连接数据集?

社区小助手 2019-12-01 19:29:59 296 浏览量 回答数 1

问题

如何使用其他值之间的值连接数据集?

flink小助手 2019-12-01 19:26:03 372 浏览量 回答数 1

回答

曾几何时,SQL不支持外部联接语法。这是一个古老的世界,电话通过电线连接到墙上,欧洲的每个县都有自己的货币,大多数美国人在电视上观看三到四个主要网络之一。 当时,Microsoft甚至没有真正的数据库。但是Sybase在该WHERE子句中提供了一个外部*=联接运算符,Microsoft最终将该子句适应了SQL Server。Microsoft SQL Server通过SQL Server 2008支持此功能。 因此,在WHERE子句中,没有受支持的SQL Server版本支持外部联接。 令人高兴的是,现在存在一种更好的标准语法(至少我们很沮丧,认为随着时间的推移事情不会变得更好)。FROM子句中的“逗号运算符” 降级为其原始定义-a CROSS JOIN。该CROSS JOIN过滤掉非匹配。例如,如果Dtl没有行,则不CROSS JOIN返回任何行。 就是说,没有办法在WHERE子句中做您想做的一般事情。有些查询可以复制一个外部查询JOIN,但是它们需要对查询进行更多的操作。但是,还有一个不错的选择,那就是使用正确的现代语法编写查询。

心有灵_夕 2019-12-25 21:39:04 0 浏览量 回答数 0

回答

select name, @rownum := @rownum + 1 as row_number from your_table cross join (select @rownum := 0) r order by name 这部分: cross join (select @rownum := 0) r 使得可以引入变量而无需单独的查询。因此,第一个查询也可以分为以下两个查询: set @rownum := 0; select name, @rownum := @rownum + 1 as row_number from your_table order by name; 例如在存储过程中使用时。来源:stack overflow

保持可爱mmm 2020-05-17 17:34:07 0 浏览量 回答数 0

回答

您正在尝试取消数据透视。MySQL没有unpivot函数,因此您将必须使用UNION ALL查询将列转换为行: select id, 'a' col, a value from yourtable union all select id, 'b' col, b value from yourtable union all select id, 'c' col, c value from yourtable 请参阅带有演示的SQL Fiddle。 也可以使用CROSS JOIN: select t.id, c.col, case c.col when 'a' then a when 'b' then b when 'c' then c end as data from yourtable t cross join ( select 'a' as col union all select 'b' union all select 'c' ) c来源:stack overflow

保持可爱mmm 2020-05-10 20:06:09 0 浏览量 回答数 0

回答

不要混合使用ANSI-89样式和ANSI-92样式的连接。它们具有不同的优先级,这可能导致混乱的错误,这就是这里发生的情况。您的查询的解释如下: FROM property p, ( propertygeometry pg JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216 ... ) 在上面的示例中,在甚至考虑了逗号样式的连接之前,首先评估使用JOIN关键字的连接。届时该表p尚未声明。 从MySQL手册: 但是,逗号运算符的优先级小于INNER JOIN,CROSS JOIN,LEFT JOIN等。如果在存在联接条件时将逗号联接与其他联接类型混合使用,则可能会出现“ on子句”中形式为“ 未知列” col_name”的错误。本节稍后将提供有关解决此问题的信息。 我建议始终使用ANSI-92样式的连接,即使用JOIN关键字: SELECT p.*, IF(COUNT(ms.PropertyID) > 0,1,0) AS Contacted, pm.MediaID, date_format(p.AvailableFrom, '%d %b %Y') AS 'AvailableFrom', astext(pg.Geometry) AS Geometry FROM property p JOIN propertygeometry pg ON p.PropertyGeometryID = pg.id JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216 LEFT JOIN message ms ON ms.PropertyID = p.id AND ms.SenderID = 384216 LEFT JOIN property_media pm ON pm.PropertyID = p.id AND pm.IsPrimary = 1 WHERE p.paused = 0 GROUP BY p.id来源:stack overflow

保持可爱mmm 2020-05-11 11:20:42 0 浏览量 回答数 0

回答

此解决方案不使用循环,过程或临时表。子查询会生成最近10,000天的日期,并且可以扩展为任意向前或向后的日期。 select a.Date from ( select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as Date from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d ) a where a.Date between '2010-01-20' and '2010-01-24' 输出: Date 2010-01-24 2010-01-23 2010-01-22 2010-01-21 2010-01-20 性能说明 在这里对其进行测试,其性能令人惊讶地良好:上面的查询花费了0.0009秒。 如果我们扩展子查询以生成近似值。100,000个数字(因此约有274年的日期),运行时间为0.0458秒。 顺便说一句,这是一种非常可移植的技术,该技术可以在大多数数据库中进行少量调整。来源:stack overflow

保持可爱mmm 2020-05-08 10:58:34 0 浏览量 回答数 0

问题

这个sql怎么用jpql来写

a123456678 2019-12-01 20:21:31 798 浏览量 回答数 1

回答

前面那个@是啥,变量,这个是事务块里面的吧case when支持。。。cross join应该不行

游客886 2019-12-02 02:04:40 0 浏览量 回答数 0

回答

可以在2008R2上运行,还没有测试过: USE MASTER GO select s.session_id, s.host_name, s.program_name, s.client_interface_name, s.login_name , c.cursor_id, c.properties, c.creation_time, c.is_open, con.text, l.resource_type, d.name, l.request_type, l.request_Status, l.request_reference_count, l.request_lifetime, l.request_owner_type from sys.dm_exec_cursors(0) c left outer join (select * from sys.dm_exec_connections c cross apply sys.dm_exec_sql_text(c.most_recent_sql_handle) mr) con on c.session_id = con.session_id left outer join sys.dm_exec_sessions s on s.session_id = c.session_id left outer join sys.dm_tran_locks l on l.request_session_id = c.session_id left outer join sys.databases d on d.database_id = l.resource_database_id

保持可爱mmm 2019-12-02 03:17:06 0 浏览量 回答数 0

回答

您必须为此使用副作用变量 SELECT profilename, name FROM ( SELECT m.profilename, s.name, @r:=case when @g=m.profilename then @r+1 else 1 end r, @g:=m.profilename FROM (select @g:=null,@r:=0) n cross join menus m left join menuitems s on m.menuid = s.menuid ) X WHERE r <= 5来源:stack overflow

保持可爱mmm 2020-05-17 19:44:29 0 浏览量 回答数 0

问题

DML多计算引擎是什么?

nicenelly 2019-12-01 21:25:14 1214 浏览量 回答数 0

问题

分析型数据库多计算引擎是什么?

nicenelly 2019-12-01 21:25:07 1259 浏览量 回答数 0

回答

要实现您的要求,请尝试以下操作(从OP编辑后进行更新): SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference FROM MyTable A INNER JOIN MyTable B ON B.requestid = (A.requestid + 1) ORDER BY A.requestid ASC 如果requestid不是连续的,则可以使用 SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference FROM MyTable A CROSS JOIN MyTable B WHERE B.requestid IN (SELECT MIN (C.requestid) FROM MyTable C WHERE C.requestid > A.requestid) ORDER BY A.requestid ASC来源:stack overflow

保持可爱mmm 2020-05-17 14:09:36 0 浏览量 回答数 0

回答

交叉加入您的查询: select c.name, c.counter / t.total probability from ( select name, count(name) counter from objects_desert_tb group by name ) c cross join ( select count(id) total from objects_desert_tb ) t

保持可爱mmm 2019-12-02 03:16:21 0 浏览量 回答数 0

问题

DML多计算引擎是什么?

nicenelly 2019-12-01 21:10:44 1144 浏览量 回答数 0

问题

分析型数据库多计算引擎是什么?

nicenelly 2019-12-01 21:10:27 1432 浏览量 回答数 0

回答

关于你想知道的情况,你可以查询一下 “笛卡尔乘积”。笛卡尔乘积就会导致取出的数据比我们需要的数据多的问题。我们在表查询的时候,要注意避免出现笛卡尔乘积。使用交叉连接会产生笛卡尔乘积 select from A cross join B或不使用任何连接条件,也可产生笛卡尔乘积 select from A,B

吴孟桥 2019-12-02 02:49:28 0 浏览量 回答数 0

回答

哎呀,当然替代不了啦。据一个简单的业务场景,比如有两个数据结果集1,和2,1结果集很小,2结果集很大。如果,让1和2在连接的时候,我只需要找到2中一个满足条件的纪录,就不用接着往下找,这一次连接循环退出。这种业务场景INNER JOIN很难实现,因为INNER JOIN必须要找到所有满足条件的纪录。例子如下:use tempdb GO ;WITH dataSet1 AS( SELECT * FROM (VALUES(0), (1), (2), (3), (4), (5), (6), (7), (8), (9)) AS T(C) ), dataSet2 as( SELECT a = a.C, b = b.C, c = c.C, d = d.C FROM dataSet1 as a, dataSet1 as b, dataSet1 as c, dataSet1 as d ) SELECT A.C, B.a FROM dataSet1 AS A CROSS APPLY( SELECT TOP 1 * FROM dataSet2 AS B WHERE B.a = A.C ) AS B

风移 2019-12-02 02:48:54 0 浏览量 回答数 0

回答

您可以使用split_string()和派生表: select t.client, v.classname from t cross apply split_string(t.class, ';') s left join (values ('1', 'cat'), ('2', 'dog'), . . . ) v(class, classname) on t.class = v.class

祖安文状元 2020-01-03 16:30:07 0 浏览量 回答数 0

问题

在PySpark的文字列中检测到INNER连接的笛卡尔积

社区小助手 2019-12-01 19:25:26 644 浏览量 回答数 1

回答

您可以使用纯SQL来做到这一点 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value FROM table1 t CROSS JOIN ( SELECT a.N + b.N * 10 + 1 n FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b ORDER BY n ) n WHERE n.n <= 1 + (LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', ''))) ORDER BY value 注意:诀窍是利用tally(numbers)表和在这种情况下非常方便的MySQL函数SUBSTRING_INDEX()。如果您进行了大量此类查询(拆分),则可以考虑填充并使用持久化计数表,而不是像本例中那样通过子查询动态生成该表。此示例中的子查询有效地生成了一个从1到100的数字序列,使您可以在源表中每行最多拆分100个定界值。如果您需要更多或更少,则可以轻松进行调整。 输出: 值somethingAsomethingBsomethingC其他elseElB 这是SQLFiddle演示 这就是查询与持久化理货表格的外观 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value FROM table1 t CROSS JOIN tally n WHERE n.n <= 1 + (LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', ''))) ORDER BY value来源:stack overflow

保持可爱mmm 2020-05-10 22:32:51 0 浏览量 回答数 0

回答

您应该使用IS NOT NULL。(比较操作符=和<>两个给定UNKNOWN与NULL上表达的任一侧)。 SELECT * FROM table WHERE YourColumn IS NOT NULL; 为了完整起见,我将提到在MySQL中您还可以否定空安全相等运算符,但这不是标准的SQL。 SELECT * FROM table WHERE NOT (YourColumn <=> NULL); 编辑以反映评论。听起来您的表格可能未采用第一范式,在这种情况下,更改结构可能会使您的任务更容易。不过,还有其他几种方法可以... SELECT val1 AS val FROM your_table WHERE val1 IS NOT NULL UNION ALL SELECT val2 FROM your_table WHERE val2 IS NOT NULL /And so on for all your columns/ 上面的缺点是,它为每列多次扫描表一次。下面可能会避免这种情况,但是我还没有在MySQL中测试过。 SELECT CASE idx WHEN 1 THEN val1 WHEN 2 THEN val2 END AS val FROM your_table /CROSS JOIN/ JOIN (SELECT 1 AS idx UNION ALL SELECT 2) t HAVING val IS NOT NULL /Can reference alias in Having in MySQL/来源:stack overflow

保持可爱mmm 2020-05-11 10:30:02 0 浏览量 回答数 0

回答

SELECT name FROM orders,company WHERE orderID = 1 AND companyID IN (attachedCompanyIDs) attachedCompanyIDs是转换为INT(的类型companyID)的标量值。 强制转换仅返回直到第一个非数字的数字(在您的情况下为逗号)。 从而, companyID IN ('1,2,3') ≡ companyID IN (CAST('1,2,3' AS INT)) ≡ companyID IN (1) 在中PostgreSQL,您可以将字符串转换为数组(或首先将其存储为数组): SELECT name FROM orders JOIN company ON companyID = ANY (('{' | attachedCompanyIDs | '}')::INT[]) WHERE orderID = 1 甚至会在上使用索引companyID。 不幸的是,这不起作用,MySQL因为后者不支持数组。 您可能会发现这篇文章很有趣(请参阅参考资料#2): MySQL中的10件事(无法按预期工作) 更新: 如果以逗号分隔的列表中的值数量有一定的合理限制(例如,不超过5),那么您可以尝试使用此查询: SELECT name FROM orders CROSS JOIN ( SELECT 1 AS pos UNION ALL SELECT 2 AS pos UNION ALL SELECT 3 AS pos UNION ALL SELECT 4 AS pos UNION ALL SELECT 5 AS pos ) q JOIN company ON companyID = CAST(NULLIF(SUBSTRING_INDEX(attachedCompanyIDs, ',', -pos), SUBSTRING_INDEX(attachedCompanyIDs, ',', 1 - pos)) AS UNSIGNED) 分享来源:stack overflow

保持可爱mmm 2020-05-10 18:53:50 0 浏览量 回答数 0

回答

替代和改进: ;WITH CTE AS (SELECT ParkingID, ParkingDateTime, COUNT(*) + 1 SplitCount, ParkingStatus AS InitialStatus FROM #ParkingTemp GROUP BY ParkingID, ParkingDateTime, ParkingStatus), DistinctIDCTE AS (SELECT DISTINCT ParkingID FROM #ParkingTemp), CTE1 AS (SELECT Dates, DATEADD(hour, hrs, Dates) ReportDateTime, ParkingID FROM [CalendarDate], #Number N, DistinctIDCTE WHERE dates >= @From AND Dates <= @To), CTE2 AS (SELECT c.ParkingID, DATEADD(minute, -DATEPART(minute, ParkingDateTime), ParkingDateTime) ParkingDate, ParkingDateTime, hrs AS rownum, InitialStatus FROM CTE C CROSS APPLY ( SELECT hrs FROM #Number N WHERE c.SplitCount > n.Hrs ) ca), CTE5 AS (SELECT c4.ParkingID, c4.ReportDateTime, CASE WHEN rownum = 0 AND InitialStatus = 1 THEN 2 WHEN rownum = 1 AND InitialStatus = 1 THEN 3 WHEN rownum = 0 AND InitialStatus = 0 THEN 4 WHEN rownum = 1 AND InitialStatus = 0 THEN 3 ELSE 2 END AS ParkingStatusid, CASE WHEN rownum = 0 THEN DATEDIFF(minute, ReportDateTime, ParkingDateTime) WHEN rownum = 1 THEN 60 - DATEPART(minute, ParkingDateTime) ELSE 1.00 END Duration, ParkingDateTime, rownum, InitialStatus FROM CTE1 c4 LEFT JOIN CTE2 c2 ON c4.ParkingID = c2.ParkingID AND c2.ParkingDate = c4.ReportDateTime) SELECT c5.ParkingID, c5.ReportDateTime, c5.ParkingStatusid, Duration, PS.StatusName AS Comment FROM CTE5 c5 INNER JOIN #ParkingStatus ps ON c5.ParkingStatusid = ps.ParkingStatus ORDER BY ReportDateTime DESC; 注意:清除我的疑惑。在同一小时内,将不同的样本数据扔到一个停车位中,例如一小时内。

祖安文状元 2020-01-05 14:19:04 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板