问题标签 [left-join]

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 投票
1 回答
1698 浏览

mysql - 高效的 MySQL 查询以查找 A 中与 B 中不匹配的条目

我有几个表(产品和供应商),想找出哪些项目不再列在供应商表中。

表 uc_products 有产品。表 uc_supplier_csv 有供应商库存。uc_products.model 加入 uc_suppliers.sku。

尝试识别产品表中未在供应商表中引用的库存时,我看到很长的查询。我只想提取匹配的条目的nidsid IS NULL只是为了让我可以确定哪些项目没有供应商。

对于下面的第一个查询,数据库服务器(4GB 内存/2x 2.4GHz 英特尔)需要一个小时才能获得结果(507 行)。我没有等待第二个查询完成。

我怎样才能使这个查询更优化?是不是因为字符集不匹配?

我在想以下将是最有效的 SQL 使用:

对于此查询,我得到以下 EXPLAIN 结果:

我会认为键 idx_sku 和 idx_model 在这里使用是有效的,但它们不是。那是因为表的默认字符集不匹配吗?一个是 UTF-8,一个是 latin1。

我也考虑过这种形式:

EXPLAIN 显示该查询的以下结果:

就这样我不会错过任何东西,这里有一些更令人兴奋的细节:表格大小和统计数据,以及表格结构:)

编辑:为下面来自 Martin 的几个建议查询添加查询计划:

0 投票
1 回答
2426 浏览

select - 从 table1 中选择 *,其中 JID 不在 table2 中,table2.uid 也不是 11111

我想从表一中选择所有内容,其中包含一列 JID。这些都是玩家可以学习的东西。但是有一个 table2 列出了玩家已经学过的东西。所以如果 JID 在表 2 中,它已经被学习了,我不希望从表 1 中选择它。

例如。

表 1 JID 标题 描述 等级

表 2 JID UserID value1 value2

表 1 可能有 100 行,但如果表 2 有 9 行,其中包含表 1 中的一些 JID,我不希望它们被选中。更重要的是,它特定于表 2 中的用户 ID。所以我需要通过 JID 过滤表 2!= 匹配表 1 中的 JID,但只有当用户 ID = php 变量传递时。

希望这是有道理的。我不想要子查询。我认为在 JID 上使用左外连接是可能的,但我不知道如何使用 USERID...帮助!

ps 如果UID不匹配,则JID可以在table1和table2中...如果匹配,则在table2中找不到JID以进行选择。

0 投票
3 回答
6091 浏览

sql - MySQL:LEFT JOIN .. 从表 1 中选择所有,即使表 2 中没有?

我要加入几张桌子以供选择

如果第 2、3、4 个表中没有任何匹配项,只要第一个表匹配,我仍然想提取结果。我以为 LEFT JOIN 做到了这一点,但事实并非如此。

这是完整的查询:

得出 316 个结果

这是没有连接的查询:

得出 362 个结果

我有一种预感,这是因为我在 JOIN qry 中的WHERE prod_drop.prod_drop_name = "Carat Weight"子句。但是有没有办法在上面的查询中提取我需要的内容,但仍然从第一个(最左边,cart_product)表中提取所有内容,即使其他表中没有匹配项?

谢谢!!

0 投票
2 回答
1387 浏览

php - 跨多个模型构建条件语句 (CakePHP 1.2.5)

假设我有 3 个模型:用户、地区、国家。

这些模型中的每一个都使用 Containable 行为。我正在尝试从代码为“US”的国家/地区查找用户。这是我正在尝试的:

CakePHP 将其分为 2 个查询:

  1. 首先,它正在选择代码为“US”的所有国家/地区的 ID。
  2. 然后它使用这些 ID 来选择所有用户加入区域,这些用户位于region.country_id之前检索到的国家 ID 列表中。

结果,我的应用程序中出现了 SQL 错误,因为我的conditions数组包含对 Country.code 的引用,并且 Cake 构建的第二个查询没有加入国家/地区。

我看到的最好的 Cake 解决方案是构建一个子查询,如手册的复杂查找条件部分中所述。然而,这似乎很复杂,而且比我想实现的更像是一种黑客攻击。有没有更简单的方法可以让我忽略?

0 投票
1 回答
1793 浏览

java - 使用带有 SQLQuery 的 @JoinTable 获取连接

我有一个具有属性“latestHistory”的映射实体,该属性通过连接表映射,例如:

当我调用 myRecord.getLatestHistory() 时,映射工作正常。

我有一个复杂的原生 SQL 查询,它返回一批记录,并使用连接表连接每条记录的历史记录。我想从查询中返回记录实体,并在结果中填充历史对象。我的尝试如下所示:

当我这样做时,它会生成如下查询:

我怎样才能让它正确加入并获取我的关联,而不会弄乱选择列表?

[更新:我尝试过的一些方法:

只要使用 addEntity 添加最左边的(根)实体,我使用 addEntity(...) 还是 addJoin(...) 似乎没有太大区别。

]

0 投票
2 回答
1560 浏览

sql - GROUP_CONCAT 和 LEFT_JOIN 问题 - 并非所有行都返回

假设我的数据库方案如下:

如果我运行第一个查询以获取所有产品及其用户(如果有的话),我会得到:

对我来说看上去很好。现在,如果我想做同样的事情,除了我想每行有一个产品,并带有连接的用户名(如果有任何用户,否则为 NULL):

如果一个产品没有用户, GROUP_CONCAT 会阻止 mysql 为这个产品生成一行,即使有一个LEFT JOIN

  1. 这是预期的 MySQL 行为吗?
  2. 有什么方法可以使用 GROUP_CONCAT 或其他函数获得预期的输出?
0 投票
3 回答
924 浏览

php - 从 PHP 中检索 MYSQL 连接值

我有两个或多个表在同一列名下保存值。现在,当我加入这两个表时,列名保持不变。在 PHP ($row['name']) 中检索这些值时,我遇到了问题,因为列 'name' 被使用了两次。

是否有任何可能的方法来分隔查询中的这两列?

表格故事 ID、名称、内容、日期

作者 ID、姓名、日期

当我加入这两个时,我得到一个具有相似“名称”列的表。

无论如何要分开这两个表,所以作者表前面有一个前缀?例如作者姓名 /authors_*

0 投票
1 回答
311 浏览

linq-to-sql - LINQ 查询返回在连接中没有关联记录的记录列表

在结果集是那些没有关联记录的记录的情况下,返回查询的最有效方法是什么?我正在使用 LINQ 和 Visual Basic,并且一直在尝试构造一个左外连接,然后过滤那些在关联表中 id 为空或为空的记录,但对此我太陌生了,以至于我什么都做不了。

想做类似的事情:

我想返回整个左表减去这个结果集,但我是一个真正的菜鸟并且被卡住了。

0 投票
3 回答
309 浏览

sql - 当我运行左连接时,里面发生了什么?

我有一个关于 SQL 左连接的问题:我想知道 SQL 服务器如何执行左连接?

假设我有两张桌子。

人们

  • ID
  • 姓名

电话

  • ID
  • person_id
  • 电话

当我执行时:

...我想知道 SQL 服务器如何处理查询字符串。

我的猜测是:

  1. 选择所有行的人
  2. 开始匹配电话行与条件。在这种情况下,people.id = phone_person_id。
  3. 如果未找到,则将“电话”值显示为空,因为它是左连接。

我对么??

此外,我应该阅读哪些书籍才能获得此类信息?

0 投票
2 回答
264 浏览

mysql - MySQL:有没有条件 LEFT JOIN 的方法?(或类似的?)

我正在编写一个查询以获取表中的所有产品products,以及每个产品的销售价格(如果表中存在该项目的记录)specials

我正在寻找的是这样的:

我意识到 MySQL 不是一种编程语言,但是有没有办法创建一个查询来产生与上述逻辑等价的结果?

结果集应如下所示: