我在MySQL中有两个表,我想在一个查询中加入。
表一opc_tag:
id name
表二opc_data:
id tag_id value created_at
我想根据“ created_at ”字段列出opc_tag中opc_data中最后一条记录的所有行。
我试图在Google上找到它,但它不起作用。 以下查询从 opc_data-table 中选择了包含多个记录的标记。
SELECT t.*, d.*
FROM opc_tag t LEFT JOIN opc_data d ON t.id = d.tag_id
WHERE d.created_at = (
SELECT MAX(d.created_at)
FROM opc_data d2
WHERE d2.tag_id = t.id
)
答案 0 :(得分:1)
我认为这样做会:
SELECT t.*,d.* FROM opc_tag t
LEFT JOIN opc_data d ON t.id = d.tag_id
WHERE d.created_at = (
SELECT MAX(created_at) FROM opc_data WHERE tag_id = t.id
)
GROUP BY t.id
如果要显示所有标签,即使那些没有数据的标签,请在where子句中使用它:
WHERE d.created_at = (
SELECT MAX(created_at) FROM opc_data WHERE tag_id = t.id
) OR d.created_at IS NULL
答案 1 :(得分:0)
尝试此操作,它会在opc_data
ORDER BY created_at DESC LIMIT 1
之前输入最后一个tag_id,并从opc_tag
SELECT *
FROM opc_tag
WHERE id= (
SELECT tag_id
FROM opc_data
ORDER BY created_at DESC LIMIT 1
)