如何在MySQL中限制查询中的字段

时间:2015-02-25 15:42:20

标签: mysql sql

我有两张这样的表:

TableOne(id, name, attr)
{
    1, Mark, A
    2, Peter, B
    3, John, A
    4, Mary, A
}
TableTwo(id, id_TableOne, path)
{
    1, 1, one.png
    2, 1, two.png
    3, 1, three.png
    4, 3, foo.png
    5, 3, bar.png
}

SELECT TableOne.name, TableTwo.path
FROM TableOne, TableTwo
WHERE TableOne.attr = 'A'
AND TableOne.id = TableTwo.id_TableOne

That outputs:

{
    Mark, one.png
    Mark, two.png
    Mark, three.png
    John, foo.png
    John, bar.png
}

我想限制子查询,并且每个名称只显示一个路径。 所需的输出是:

{
    Mark, one.png
    John, foo.png
    Mary, NULL
}

我尝试过LIMITS,然后在另一个中写一个select,但是我没有得到我想要的结果,我也读了一些令我担心的东西

  

“MySQL不支持Un Certain子查询运算符的子查询中的LIMIT”

来自http://dev.mysql.com/doc/refman/5.0/en/subquery-restrictions.html

任何人都可以指导我解决我的问题吗?请。

3 个答案:

答案 0 :(得分:2)

试试这个:

SELECT TableOne.name, MIN(TableTwo.path)
FROM TableOne LEFT JOIN TableTwo ON (TableOne.id = TableTwo.id_TableOne)
WHERE TableOne.attr = 'A'
GROUP BY TableOne.name

答案 1 :(得分:2)

如果有多个路径,您想要返回哪条路径?如果任何路径正常,那么您可以使用此查询:

SELECT TableOne.name, TableTwo.path
FROM
  TableOne INNER JOIN TableTwo
  ON TableOne.id = TableTwo.id_TableOne
WHERE
  TableOne.attr = 'A'
GROUP BY
  TableOne.name

如果你想返回第一条路径,那么你需要使用它:

SELECT TableOne.name, TableTwo.path
FROM
  TableOne INNER JOIN (
    SELECT   id_TableOne, MIN(id) as min_id
    FROM     TableTwo
    GROUP BY id_TableOne
  ) m ON TableOne.id = m.id_TableOne
  INNER JOIN TableTwo
  ON TableOne.id = TableTwo.id_TableOne
     AND m.min_id = TableTwo.id
WHERE TableOne.attr = 'A'

答案 2 :(得分:1)

您需要分组,使用和汇总功能

SELECT TableOne.name, MIN( TableTwo.path ) 
FROM TableOne
LEFT JOIN TableTwo ON TableOne.id = TableTwo.id_TableOne
GROUP BY name