Php 我想需要子查询
我昨天问了这个问题,为了确保这一点,我重新发布了一个非常简单的版本 对于我正在尝试什么,没有任何困惑Php 我想需要子查询,php,mysql,Php,Mysql,我昨天问了这个问题,为了确保这一点,我重新发布了一个非常简单的版本 对于我正在尝试什么,没有任何困惑 adam toyota joe toyota rick mazda SELECT * FROM table WHERE name LIKE adam and also return rows where name is not adam but have the same car as adam. 因此,搜索adam将返回行:adam&joe SELECT *
adam toyota
joe toyota
rick mazda
SELECT * FROM table WHERE
name LIKE adam
and also return rows where name is not adam but have the same car as adam.
因此,搜索adam将返回行:adam&joe
SELECT * FROM `table` WHERE `name` = 'adam'
OR car IN (
SELECT car FROM `table` WHERE `name` = 'adam'
)
“名字不是亚当,但是”这部分没有真正意义,因为你无论如何都会得到所有的亚当
“name is not adam but”(名字不是亚当,但是)部分没有真正意义,因为你无论如何都会得到所有的亚当。你不需要有两个部分来查询,一个部分会得到所有的亚当(亚当的行总是会被返回…因为亚当拥有的汽车总是会匹配亚当行的汽车
:)
):
或者JOIN
版本,它在MySQL上的性能可能会更好,也可能不会更好:
SELECT DISTINCT a.*
FROM table a
JOIN table b
ON a.car = b.car
WHERE b.name = 'adam'
您的查询不需要有两个部分,一个部分将得到全部(Adam的行将始终返回…因为Adam拥有的汽车将始终与Adam行中的汽车匹配
:)
):
或者JOIN
版本,它在MySQL上的性能可能会更好,也可能不会更好:
SELECT DISTINCT a.*
FROM table a
JOIN table b
ON a.car = b.car
WHERE b.name = 'adam'
并为亚当问题覆盖零车
SELECT * FROM `cars` WHERE
car = (
SELECT car FROM `cars` WHERE `name` = 'adam'
)
OR
`name` = 'adam'
并为亚当问题覆盖零车
SELECT * FROM `cars` WHERE
car = (
SELECT car FROM `cars` WHERE `name` = 'adam'
)
OR
`name` = 'adam'
我不知道为什么答案被否决了。我认为第一个答案包含了一个巧妙的观察结果。请注意,如果
(name,car)
元组不是唯一的,则连接表单可以返回“重复”行。还要注意,如果car
的adam
值为NULL,则两个查询都不会返回“adam”的行。(@Gordon:被否决的不是我,我认为这是一个很好的答案;我只是指出了一些在有限的样本数据中无法识别的细微之处。对于OP提供的样本数据,这两个查询都可以正常工作。)@mleko:我认为联接版本会为提供的样本数据返回指定的结果。@spencer7593我检查过了,是的:)@spencer7593。这就是为什么我特别评论第一个解决方案。第二个问题可以通过使用selectdistinct
轻松解决,但它很容易重复。我不知道为什么答案被否决。我认为第一个答案包含了一个巧妙的观察结果。请注意,如果(name,car)
元组不是唯一的,则连接表单可以返回“重复”行。还要注意,如果car
的adam
值为NULL,则两个查询都不会返回“adam”的行。(@Gordon:被否决的不是我,我认为这是一个很好的答案;我只是指出了一些在有限的样本数据中无法识别的细微之处。对于OP提供的样本数据,这两个查询都可以正常工作。)@mleko:我认为联接版本会为提供的样本数据返回指定的结果。@spencer7593我检查过了,是的:)@spencer7593。这就是为什么我特别评论第一个解决方案。使用选择DISTINCT
可以很容易地修复第二个问题,但它很容易重复。这正是我想要的。谢谢,这正是我想要的。谢谢。如果'adam'
行上的car
值为空,则此查询不会返回该行。此查询用于提供的样本数据;这不同于边缘案例的OP规范(不在样本数据中)。@spencer7593你是对的,但是当前的答案都无效,这取决于我们想要得到什么事实上,来自Shreder的答案符合规范;尽管我认为所有答案中的查询都会为样本数据返回一个“正确”的结果。如果'adam'
行上的car
值为空,则此查询不会返回该行。此查询用于提供的样本数据;这不同于边缘案例的OP规范(不在样本数据中)。@spencer7593你是对的,但是当前的答案都无效,这取决于我们想要得到什么事实上,来自Shreder的答案符合规范;尽管我认为所有答案中的查询都会返回样本数据的“正确”结果。