-1

2 つのリンク: 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');

2 番目のテーブル:

 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');

3 番目のテーブル:

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;

最初のテーブルの特定のレコードの 2 番目のテーブルのすべてのパラメーターについて、3 番目のテーブルから最新の値を取得したいと考えています。たとえば、椅子の長さ、幅、高さの最新の値です。

SQLite と MySQL で結果が異なる... MySQL バージョンのような SQLite バージョンでの結果が必要です。なにか提案を?

4

1 に答える 1

1

を使用している場合GROUP BY、SQL 標準では、選択した他のすべての列で集計関数を使用する必要があります。

この場合、MySQL と SQLite はエラーをスローしませんが、グループからランダムなレコードを提供するだけです。異なるレコードを取得するのは、実装が異なるためです。

ORDER BYサブクエリ内の は、外側のクエリの順序に影響を与える保証はありません

SQLite 3.7.11 以降では、 または を使用すると、グループから 1 つの特定のレコードを強制的に使用することができMINますMAX。したがって、問題は次のように解決できます。

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

SQL フィドル

于 2013-02-15T16:07:37.013 に答える