gpt4 book ai didi

mysql - 必须输入两次 mySQL 条件?

转载 作者:行者123 更新时间:2023-11-29 07:34:39 25 4
gpt4 key购买 nike

假设我有两个表:

Table: customers
Fields: customer_id, first_name, last_name

Table: customer_cars
Fields: car_id, customer_id, car_brand, car_active

假设我正在尝试编写一个查询,以显示所有名字为“Karl”的客户以及他们拥有的**活跃**汽车的品牌。并非所有客户都会拥有一辆活跃的汽车。有些汽车处于事件状态,有些则处于非事件状态。

请记住,为了清楚和简单起见,这是我刚刚编造的一个代表性示例。请不要回答关于我们为什么要这样做的问题,我可以使用表别名,如何有一辆不活动的汽车,或者我的字段名称可以写得更好。这是一个假的例子,旨在非常简单地说明这一点。它具有我一直遇到的结构和问题。

这似乎最好用 LEFT JOIN 和子查询来完成。

SELECT
customer_id,
first_name,
last_name,
car_brand

FROM
customers
LEFT JOIN
(SELECT
customer_id,
car_brand
FROM
customer_cars
INNER JOIN customers ON customer_cars.customer_id = customers.customer_id
WHERE
first_name = 'Karl' AND
customer_cars.car_active = '1') car_query ON customers.customer_id = car_query.customer_id

WHERE
first_name = 'Karl'

结果可能是这样的:

first_name    last_name    car_brand
Karl Johnson Dodge
Karl Johnson Jeep
Karl Smith NULL
Karl Davis Chrysler

请注意两个 WHERE 子句中“Karl”的重复,以及与外部查询中同一个表的子查询中的 INNER JOIN。我对 mySQL 的理解是这个重复是必要的,因为它在处理外部查询之前先处理子查询。因此,必须适当限制子查询,使其不会扫描所有记录,然后尝试匹配结果记录。

我知道删除 car_active = '1' 条件会有所改变,但这是一项要求。

我想知道是否可以用一种不同的方式来完成这样的查询,这种方式只会导致条件和连接被输入一次。是否有推荐的方法首先确定外部查询的优先级,然后匹配内部查询?

我知道可以编写两个不同的查询(查找 Karl 的所有记录,然后执行另一个查找匹配汽车的查询)。但是,这会导致与数据库的多个连接(每个返回的记录一个连接)并且会非常费力且效率低下。

我也知道关联子查询,但根据我的理解和经验,这是为了在字段集中为每个客户返回一个字段(例如,一个聚合字段,如 Karl 花了多少钱)。我正在寻找与此类似的方法,但可以将一个客户与多个其他记录匹配,如上面的示例输出。

在您的回复中,如果您有推荐的查询结构来解决这个问题,那么如果您能写一个清晰的示例而不是仅仅描述它,那将非常有帮助。非常感谢您的宝贵时间!

最佳答案

首先,简单直接的查询还不够吗?

Say I am trying to write a query that shows all customers with a first name of "Karl," and the brands of the ** active ** cars they have. Not all customers will have an active car. Some cars are active, some are inactive.

按照这个要求,我可以做类似的事情:

SELECT C.first_name
, C.last_name
, CC.car_brand
FROM customers C
LEFT JOIN cutomer_cars CC ON CC.customer_id = C.customer_id
AND car_active = 1
WHERE C.first_name = 'Karl'

看看 SQL Fiddle sample .

关于mysql - 必须输入两次 mySQL 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49547470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com