Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据列在另一个表中的映射值获取列的最小值的最有效查询_Mysql_Sql - Fatal编程技术网

Mysql 根据列在另一个表中的映射值获取列的最小值的最有效查询

Mysql 根据列在另一个表中的映射值获取列的最小值的最有效查询,mysql,sql,Mysql,Sql,这里有一个例子 carsOwned name|car 1 |acura 1 |honda 1 |mercedes 2 |honda 2 |mercedes 3 |acura 4 |mercedes 在输出中,每个名称都会显示其拥有的carValue表中显示的最便宜的汽车值。 不确定如何以最有效的方式执行此操作。我知道,对于carOwned中的每个名称,您希望选择carValue中值最低的汽车 这可以通过连接两个表并添加NOT EXISTS条件来解决,以确保仅保留具有

这里有一个例子

carsOwned
name|car
1   |acura
1   |honda
1   |mercedes
2   |honda
2   |mercedes
3   |acura
4   |mercedes
在输出中,每个名称都会显示其拥有的carValue表中显示的最便宜的汽车值。
不确定如何以最有效的方式执行此操作。

我知道,对于carOwned中的每个名称,您希望选择carValue中值最低的汽车

这可以通过连接两个表并添加NOT EXISTS条件来解决,以确保仅保留具有最小可能值的记录:

SELECT o.*
FROM carsOwned o
INNER JOIN carValue v ON v.car = o.car
WHERE NOT EXISTS (
    SELECT 1
    FROM carsOwned o1
    INNER JOIN carValue v1 ON v1.car = o1.car
    WHERE o1.name = o.name AND v1.value < v.value
);
:


不能说我理解你的要求。。。为什么梅赛德斯1不是?第一张桌子是1吗?也许你应该解释一下你的桌子?
Output
name | min
1    |honda
2    |honda
3    |acura
4    |mercedes
SELECT o.*
FROM carsOwned o
INNER JOIN carValue v ON v.car = o.car
WHERE NOT EXISTS (
    SELECT 1
    FROM carsOwned o1
    INNER JOIN carValue v1 ON v1.car = o1.car
    WHERE o1.name = o.name AND v1.value < v.value
);
SELECT name, car
FROM (
    SELECT o.*, ROW_NUMBER() OVER(PARTITION BY o.name ORDER BY v.value) rn
    FROM carsOwned o
    INNER JOIN carValue v ON v.car = o.car
) x
WHERE rn = 1
| name | car      |
| ---- | -------- |
| 1    | honda    |
| 2    | honda    |
| 3    | acura    |
| 4    | mercedes |