动态mysql选择语句

动态mysql选择语句,mysql,database,Mysql,Database,我有一张像这样的桌子: +-----------------------------+ | ID | ID_CONV | NAME | DATA | | 1 | 1 | ALEX | DATA1 | | 2 | 1 | ALEX | DATA2 | | 3 | 2 | ALEX | DATA3 | | 4 | 2 | ALEX | DATA4 | | 5 | 3 | NIKO | DATA5 | | 6 | 4

我有一张像这样的桌子:

+-----------------------------+
| ID | ID_CONV | NAME | DATA  |
| 1  |    1    | ALEX | DATA1 |
| 2  |    1    | ALEX | DATA2 |
| 3  |    2    | ALEX | DATA3 |
| 4  |    2    | ALEX | DATA4 |
| 5  |    3    | NIKO | DATA5 |
| 6  |    4    | ALEX | DATA6 |
| 7  |    4    | ALEX | DATA7 |
| 8  |    3    | NIKO | DATA8 |
+-----------------------------+
我想选择alex的数据,但只使用max ID_CONV,有些如下:

+-----------------------------+
| ID | ID_CONV | NAME | DATA  |
| 6  |    4    | ALEX | DATA6 |
| 7  |    4    | ALEX | DATA7 |
+-----------------------------+
SELECT t.*
FROM your_table t
INNER JOIN
  ( SELECT name, MAX(id_conv) id_conv FROM your_table GROUP BY name
  ) t2
ON t.name     = t2.name
AND t.id_conv = t2.id_conv
WHERE t.name  = 'ALEX';
目前,要做到这一点,我必须要求max Alex的ID_CONV,然后用这个ID_CONV选择数据


我的问题是,如果可能的话,请更有效地进行此咨询

您可以找到每个名称的最大id_conv,并将其与主表连接,如下所示:

+-----------------------------+
| ID | ID_CONV | NAME | DATA  |
| 6  |    4    | ALEX | DATA6 |
| 7  |    4    | ALEX | DATA7 |
+-----------------------------+
SELECT t.*
FROM your_table t
INNER JOIN
  ( SELECT name, MAX(id_conv) id_conv FROM your_table GROUP BY name
  ) t2
ON t.name     = t2.name
AND t.id_conv = t2.id_conv
WHERE t.name  = 'ALEX';
下面是一个关联查询(较慢):

SELECT *
FROM your_table t
WHERE t.name = 'ALEX'
AND id_conv IN
  ( SELECT MAX(id_conv) id_conv FROM your_table t2 WHERE t2.name = t.name
  ) ;

您可以为每个名称找到id_conv的最大值,并将其与主表连接,如下所示:

+-----------------------------+
| ID | ID_CONV | NAME | DATA  |
| 6  |    4    | ALEX | DATA6 |
| 7  |    4    | ALEX | DATA7 |
+-----------------------------+
SELECT t.*
FROM your_table t
INNER JOIN
  ( SELECT name, MAX(id_conv) id_conv FROM your_table GROUP BY name
  ) t2
ON t.name     = t2.name
AND t.id_conv = t2.id_conv
WHERE t.name  = 'ALEX';
下面是一个关联查询(较慢):

SELECT *
FROM your_table t
WHERE t.name = 'ALEX'
AND id_conv IN
  ( SELECT MAX(id_conv) id_conv FROM your_table t2 WHERE t2.name = t.name
  ) ;
试试这个:

SELECT ID , MAX(ID_CONV) , NAME , DATA  
  FROM MyTable
 WHERE NAME = 'ALEX'
试试这个:

SELECT ID , MAX(ID_CONV) , NAME , DATA  
  FROM MyTable
 WHERE NAME = 'ALEX'

这正是不应该做的。好吧,先试试,然后也许我们可以更详细地解决一些问题。谢谢@草莓,你的回答空洞无物。一个不超过你陈述时间的简单解释就足够了。干杯这正是不应该做的。好吧,先试试,然后也许我们可以更详细地解决一些问题。谢谢@草莓,你的回答空洞无物。一个不超过你陈述时间的简单解释就足够了。干杯