mysql - 在一个查询中连接 3 个 mySQL 表

标签 mysql sql

我花了几个小时试图找出如何生成适当的 MySQL 查询来访问我的数据。这是我的sql表结构:

CREATE TABLE IF NOT EXISTS `record` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `client` int(11) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
)

CREATE TABLE IF NOT EXISTS `clip` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `record` int(11) NOT NULL,
  `data` int(11) NOT NULL,
)

CREATE TABLE IF NOT EXISTS `data` (
  `clip` int(11) NOT NULL,
  `name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `value` text COLLATE utf8_unicode_ci NOT NULL,
)

我尽可能地减少了表格。 record表包含客户端数据,然后clip用于将该客户端与存储在data中的一些客户端参数连接起来。每个客户端可以拥有任意数量的记录,并且每条记录都由不确定数量的*剪辑*组成。然后,每个剪辑引用一些数据值。

好的,我正在寻找的查询是给定一个工作表、一个数据 *名称*和一个的查询最后(日期)*客户端*完成条件名称=*given_name* AND =*given_value*。是的,我正在寻找在数据库中存储的最后一条记录中实现该条件的客户端。

我已经看到这句话了:

SELECT client
FROM clip, record 
WHERE clip.id IN (SELECT clip FROM `data` WHERE name='level' AND value='2')

但它返回所有客户端,而不仅仅是最后一个客户端,并且我的所有测试(包括日期)均不成功。

编辑:经过一些尝试和错误,并感谢你给我的想法,我得到了一个似乎有效的查询,但它确实很复杂,我很当然你可以帮助我简化:

SELECT * FROM clip, data
WHERE data.clip=clip.id 
 AND record IN (SELECT id
  FROM record a
  WHERE date = (
    SELECT MAX(date)
    FROM record b
    WHERE a.client = b.client
    )
 )
 AND data.name='NAME_HERE' AND data.value='VALUE_HERE'

嗯,这并不完全是我想要的,我需要客户端 ID,但它为我提供了该客户端的最后记录,这对我来说已经足够了。

最佳答案

如果我正确理解了您的问题,那么看看这是否适合您:

SELECT client
FROM record, clip, data
WHERE name = "given_name" AND value = "given_value"
AND data.clip = clip.id
AND clip.record = record.id
ORDER BY date DESC
LIMIT 0,1

根据您的评论更新了查询:

SELECT client, MAX(date)
FROM record, clip, data
WHERE name = "given_name" AND value = "given_value"
AND data.clip = clip.id
AND clip.record = record.id
GROUP BY client

您发布了一些数据及其所需的输出,这很有帮助。我已更新以下查询:

SELECT record.client
FROM clip JOIN data ON (data.clip = clip.id)
JOIN record ON (clip.record = record.id)
JOIN (
   SELECT client, MAX(date) as date
   FROM record
   GROUP BY client
) AS r ON (r.client = record.client AND r.date = record.date)
WHERE name = "given_name" AND value = "given_value"

关于mysql - 在一个查询中连接 3 个 mySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7695952/

相关文章:

java - SQL更新方程变量

MySQL 连接 3 个表并根据表 1 和表 2 中的 ID 对表 3 进行计数

mysql - 错误:使用Sqoop将所有表从MariaDB导入到Hive数据库时,文件路径无效

python - 使用 Python 连接到 PostgreSQL

sql server 错误地重写了我的查询?

mysql - 修改SQL查询中的日期格式

mysql - MySQL如何限制单个数据库的连接数

mysql - SQL 中的移动平均线

sql - 如何从 SQL 中的一组行构建每日历史记录?

Java导入mysql数据库/bin/bash错误