问题标签 [on-clause]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
21 回答
836400 浏览

sql - SQL JOIN - WHERE 子句与 ON 子句

看完后,这不是Explicit vs Implicit SQL Joins的重复。答案可能相关(甚至相同),但问题不同。


有什么区别,每个应该做什么?

如果我正确理解了理论,查询优化器应该能够互换使用两者。

0 投票
3 回答
14980 浏览

sql - 常量值如何影响 Join 的 ON 子句?

我最近发现 LEFT JOIN 的 ON 子句可能包含 (1 = 1) 之类的值。

这让我很沮丧,因为它打破了我对连接功能的看法。

我遇到了以下情况的更详细版本:

这是完全合法的。如果有的话,“Manager.ID = -1”会完成什么?这对加入有何影响?

0 投票
1 回答
108 浏览

linq - Linq 以非平凡的条件离开加入

这很好,它产生一个左连接

但是如果我想做这样的事情怎么办:

0 投票
1 回答
1095 浏览

doctrine - 教义 2 和“ON 子句中的未知列”

我目前正在一个项目中使用 Doctrine 2 和 ZF。到目前为止,一切都很好。但是我有一个看起来像错误的问题。

我在我的一个存储库中编写了以下代码:

生成了以下 SQL:

但是,我总是得到一个“ON 子句中的未知列 a0_.student_id”但 student_id 列确实存在于 Applications 表中。

我用谷歌搜索了一下,发现这个链接http://www.oscommerce-fr.info/faq/qa_info.php?qID=198(抱歉是法语)说在 MySQL 5.0.12 之后,解析器发生了变化,并且当您有多个 FROM 子句(这是我的情况)时,您必须添加括号。

如果我通过更改来重写 SQL 代码: FROM Applications a0_, Missions m2_

至 :

有用 !但是我不知道如何在 DQL 代码中添加这些括号(我尝试过,但失败了)。

所以也许这是一个错误,只要你有多个 FROM 子句,Doctrine 2 就应该插入括号,或者我错了?

0 投票
6 回答
30653 浏览

sql - 表左连接时“where”子句和“on”子句有什么区别?

SQL1:

SQL2:

区别在于whereon子句,它返回相同的结果吗?有什么区别?DBMS 是否以相同的方式运行它们?谢谢。

0 投票
1 回答
375 浏览

mysql - 如果在 ON 子句中使用 OR,MySQL 将不会在 JOIN 中使用可用索引

假设您有 5 个表,每个表都有它们的列:

  • 房子(id,name,street_id)
  • 街道(ID,名称)
  • 照片(身份证,姓名)
  • house_photo (house_id, photo_id)
  • street_photo (street_id, photo_id)

并说所有 'id' 列和以 '_id' 结尾的列已经有索引。

(实际上我的查询与房屋或街道无关。它们是为了争论。)

现在假设您想将每条街道分成一列,如果那条街道或其房屋有照片,您希望下一列中的照片......

这里的棘手之处在于所有的房子都在一张桌子上。以及另一张桌子上的所有照片。但是要链接 2,我们需要访问所有五个表。

我想出了以下查询,其中包含 4 个 JOIN:

独特之处在于过滤掉双打,因为当你有超过 1 张房子的照片和超过 1 张房子街道的照片时会生成它们。(Carthesian 产品)但这与我的问题无关。

我遇到的问题是查询超级慢。(需要超过 1 分钟甚至更长的时间才能完成)

当我要求 MySQL 分析查询('explain extended')时,我看到它在处理最后一个 JOIN(在 ON 子句中有一个 OR)时不会使用可用的索引。

如果我将最后一个 JOIN 拆分为 2 个 JOIN,(从而添加第五个 JOIN),查询再次变得非常快。(需要一秒钟才能完成。)

我现在的问题是:为什么在 ON 子句中引入 OR,使 MySQL 不使用该 JOIN 的可用索引/键?

我已经尝试过使用 USE INDEX 和 FORCE INDEX,但它不会让步。

欢迎任何解释/帮助。

0 投票
1 回答
368 浏览

oracle - ON 子句具有子查询的两个表的右外连接

我正在尝试在两个 liferay 表上执行右外连接 -users_并且expandovalue- 以获得结果集。

当我对所有用户进行以下查询时,我得到了想要的结果。

当尝试对一组用户(用户组的一部分)执行相同操作时,它会出错。如下查询:

这是给出userid特定用户组中人员 s 的子查询。

我会朝着一个完全错误的方向前进吗?请指教。

0 投票
1 回答
1202 浏览

codeigniter - 使用 codeigniter 活动记录的多个 on 子句

我需要使用 codeigniter 活动记录对左连接查询执行多个 on 子句。我写了这段代码:

通过执行此代码点火器添加 where not in 子句,而我需要添加与左连接相关的 ON 子句。如果可能的话,我想使用活动记录。

0 投票
2 回答
4274 浏览

db2 - 为什么子查询在 DB2 的 ON 子句中不起作用

为什么这个简单的查询在 oracle 中可以正常工作,但在 DB2 中却不行:

将涉及子查询的条件移动到 where 子句可能会有所帮助,但这会将外部联接限制为内部联接。

0 投票
2 回答
1546 浏览

ruby-on-rails - 将参数添加到 ON 子句的任何可能方法包括导轨上的左连接?

我有一个像这样的巨大复杂查询:

然后我想显示所有Objects并且只有Important_things在两个日期之间创建的。

如果我把它放在那里的where条款上,我不会得到所有,Objects只有在知情日期之间。ObjectsImportant_things

使用原始 sql 的解决方案是:

select * from objects left join important_things on important_things.object_id = objets.id and important_things.created_at between 'x' and 'y'

代替:

select * from objects left join important_things on important_things.object_id = objets.id where important_things.created_at between 'x' and 'y'

我真的需要所有这些对象,我不想使用原始 SQL、任何解决方法或将参数传递给ON关联子句的可能性?