-1

两个链接:Link 1Link 2。为什么列值的结果不同????MySQL 版本中的正确结果。对于 SQLite 版本中的相同结果,我必须做什么?

第一张表:

 CREATE TABLE Subjs 
 (
      id         INTEGER PRIMARY KEY AUTOINCREMENT, 
      subj        varchar(50)
  );



 INSERT INTO Subjs (subj) VALUES ('chair');
 INSERT INTO Subjs (subj) VALUES ('table');

第二张表:

 CREATE TABLE Params 
 (
      id         INTEGER PRIMARY KEY AUTOINCREMENT, 
      param       varchar(50)
  );

 INSERT INTO Params (param) VALUES ('lenght');
 INSERT INTO Params (param) VALUES ('width');
 INSERT INTO Params (param) VALUES ('height');

第三张表:

CREATE TABLE Subj_Param_value
(
 id         INTEGER PRIMARY KEY AUTOINCREMENT, 
 value       varchar(50), 
 subj_id     INTEGER NOT NULL,
 param_id   INTEGER NOT NULL
);

INSERT INTO Subj_Param_value (value, subj_id, param_id) VALUES ('20', 1, 1);
INSERT INTO Subj_Param_value (value, subj_id, param_id) VALUES ('30', 1, 2);
INSERT INTO Subj_Param_value (value, subj_id, param_id) VALUES ('150', 1, 3);

INSERT INTO Subj_Param_value (value, subj_id, param_id) VALUES ('30', 2, 1);
INSERT INTO Subj_Param_value (value, subj_id, param_id) VALUES ('20', 2, 2);
INSERT INTO Subj_Param_value (value, subj_id, param_id) VALUES ('90', 2, 3);

INSERT INTO Subj_Param_value (value, subj_id, param_id) VALUES ('30', 1, 1);
INSERT INTO Subj_Param_value (value, subj_id, param_id) VALUES ('60', 1, 2);
INSERT INTO Subj_Param_value (value, subj_id, param_id) VALUES ('170', 1, 3);

询问:

select * from (
select * from Subj_Param_value ORDER BY id DESC
) t, Subjs, Params
where 
Subjs.id=t.subj_id
and Params.id=t.param_id
and Subjs.id=1
group by t.param_id;

我想从第三张表中获取第二张表中所有参数的最新值,以获得第一张表中特定记录的最新值。例如,椅子的长度、宽度和高度的最新值。

SQLite 和 MySQL 的结果不同...我需要 SQLite 版本的结果,就像 MySQL 版本一样。有什么建议吗?

4

1 回答 1

1

当您使用GROUP BY时,SQL 标准要求所有其他选定的列必须使用聚合函数。

MySQL 和 SQLite 在这种情况下不会抛出错误,而只是给你一些来自组的随机记录。你得到不同的记录是由不同的实现引起的。

子查询中的an对外部查询中的顺序ORDER BY没有保证的影响。

MIN在 SQLite 3.7.11 或更高版本中,如果您使用或,您可以强制使用组中的一条特定记录MAX。所以你的问题可以这样解决:

SELECT *, MAX(Subj_Param_Value.id)
FROM Subjs, Subj_param_value, Params
WHERE ...
GROUP BY ...

SQL小提琴

于 2013-02-15T16:07:37.013 回答