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的答案符合规范;尽管我认为所有答案中的查询都会返回样本数据的“正确”结果。