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