Php SQL仅从两个不同的表中选择具有列的最大值的行

Php SQL仅从两个不同的表中选择具有列的最大值的行,php,mysql,sql,database,Php,Mysql,Sql,Database,我的双表设置如下所示: 表1 +------+---------+--------------------------------------+ | id | tail | content | +------+---------+--------------------------------------+ | 1 | abc | ... | | 2

我的双表设置如下所示:

表1

+------+---------+--------------------------------------+ | id | tail | content | +------+---------+--------------------------------------+ | 1 | abc | ... | | 2 | def | ... | | 3 | ghi | ... | | 4 | def | ... | | 5 | jkl | ... | +------+-------+----------------------------------------+ +------+---------+--------------------------------------+ |id |尾|内容| +------+---------+--------------------------------------+ |1 | abc || |2 | def || |3 | ghi || |4 | def || |5 | jkl || +------+-------+----------------------------------------+ 表2

+------+--------+---------------------------------------+ | id | tailID | value | others | +------+--------+---------------------------------------+ | 1 | 2 | 412 | | | 2 | 3 | 215 | | | 1 | 2 | 571 | | | 1 | 4 | 123 | | +------+--------+---------------------------------------+ +------+--------+---------------------------------------+ |id | taild | value |其他| +------+--------+---------------------------------------+ | 1 | 2 | 412 | | | 2 | 3 | 215 | | | 1 | 2 | 571 | | | 1 | 4 | 123 | | +------+--------+---------------------------------------+ 我喜欢将这两个表中的所有列都放在一行中,并使用匹配的tail=taild,但不使用具有相同tail的重复行

对于重复尾,只需获得同一尾的最大值的单行

我目前正在使用

SELECT table1.tail, table2.other_column FROM table1 INNER JOIN table2 on table1.id = table2.tailID WHERE table1.some_coloum = "a sepecific string" ORDER BY table2.value 选择table1.tail、table2.other_列 来自表1 内连接表2 在表1.id=表2.taid上 其中表1.some_coloum=“一个单独的字符串” 按表2.1排序 但它返回许多相同尾部的重复项


我只需要为具有表2的高值的重复尾部设置单行。

使用交叉应用进行区分:

SELECT DISTINCT t1.tail,
                t2.other_column,
                t3.[value]
FROM table1 t1
CROSS APPLY (
    SELECT  tailid,
            MAX([value]) as [value]
    FROM table2
    WHERE tailid = t1.id
    GROUP BY tailid
    ) as t3
INNER JOIN table2 t2
    ON t2.tailid = t3.tailid AND t3.[value] = t2.[value]
WHERE t1.some_coloum = "a sepecific string" 

仅选择列的最大值为
value

SELECT table1.tail, MAX(table2.value)
FROM
  table1
  INNER JOIN table2 ON table1.id = table2.tailID
  WHERE table1.content = "test"

第一组表2,然后加入

SELECT table1.tail, table2.other_column 
FROM table1 
INNER JOIN (
   SELECT tailID, max(value) as value
   FROM table2
   GROUP BY tailID
) t2g ON t2g.tailID = table1.ID
INNER JOIN table2 
on t2g.tailID = table2.tailID AND  t2g.value = table2.value
WHERE table1.some_coloum = "a sepecific string" 
ORDER BY table2.value

如果
table2
中有两行或更多行具有相同的
max(value)
tailID

MySQL或MS SQL Server,则查询仍可能返回
table1
行的多行?(不要标记未涉及的产品。)编辑问题时,还要添加预期结果。您是否尝试运行任何代码?问题已更正。@gofr1我的问题基于mysql。你的回答非常适合我的问题,非常感谢。这是错误的。因为您没有为
t2指定聚合函数。其他列
DBMS将任意选择它们。要选择正确的值,您需要一个函数来获取
t2。其他列
,其中
是组的最大值。这种功能(比如Oracle的KEEP FIRST/LAST)在MySQL中是不存在的。所以你需要一种不同的方法。例如,Serg所示的一个。@ThorstenKettner它是针对SQL Server的,OP用这个标签标记了这个问题。我问了一个关于用于OP的RDBMS的问题。如果SQL Server被错误标记,我将删除我的答案。啊,好的。我甚至没有看到
t2。另一列
groupby
中。当然,无论是在MySQL还是SQL Server中,它都不会被任意选取。但它不起作用,因为它会在实际需要的位置为每个
其他列提供最大
值,反之亦然。