2017-06-14 3 views
1

私はSQLとは格段に優れていませんが、プロジェクトに使用しています。以下は、私の目標はbのものと結合していないaで行を取得することですが、それ以上でのみ私が書きたいクエリがあるが、もちろんそれは"存在しない"クエリの最大値を取得する方法

select * from a 
where not exists (
    select * from b 
    where a.name = b.name) common 
where a.id > max(common.id) 

有効なSQLではありませんidは参加するもののいずれよりも優先されます。これのポイントは、データベースを値で埋めることを開始し、中止してから後で続行できるようにすることです。

私はPythonでsqliteを使用しています。そこている

BEGIN TRANSACTION; 
CREATE TABLE "a" (
    `Id` INTEGER NOT NULL UNIQUE, 
    `Name` TEXT, 
    PRIMARY KEY(`Id`) 
); 
INSERT INTO a VALUES(16,'Bob'); 
INSERT INTO a VALUES(17,'George'); 
INSERT INTO a VALUES(18,'Jimmy'); 
INSERT INTO a VALUES(19,'Billy'); 
INSERT INTO a VALUES(20,'Johnny'); 
INSERT INTO a VALUES(21,'James'); 
INSERT INTO a VALUES(22,'Bart'); 

CREATE TABLE "b" (
    `Id` INTEGER NOT NULL UNIQUE, 
    `Name` TEXT NOT NULL, 
    PRIMARY KEY(`Id`) 
); 
INSERT INTO b VALUES(16,'Bob'); 
INSERT INTO b VALUES(19,'Billy'); 
COMMIT; 

:私は私のpythonで2つのクエリを行うことができます知っているが、私はSQLでそれを行う方法があります推測している(と私はそれが「より良い」だと仮定しています)

ダンプ他の列は同じテーブルではありませんが、クエリでは、テーブルaからJohnny、James、Bartを取得する必要があります。これは、少なくとも1つのレコードがbに一致していることを前提とし

select a.* 
from a 
where a.id > (select max(b.id) from b where a.a_field = b.b_field) 

+0

SQLiteの中に適切に合わせたおもちゃのデータベースの[MCVE] '.dump'として提供してください。 – Yunnosch

+0

@Yunnosch編集 – phil

+0

@ CL。最後の文は十分にはっきりしていなければなりませんか?興味深い; – phil

答えて

1

私が提案している:

  • は、内側のための便利な共通テーブル式に参加します(1行目)
  • ab(2行目と4行目)にないものをすべて選択してください。
  • 希望する条件(3行目)で制限します。

abのIDは、bと結合するaのIDと同じであることに注意してください。その最大値は、どの結合のIDからの最大値です。

私は単に*を出力します。希望のフィールドのみを使用すると簡単にできるはずです。

コード:

with ab(id, field) as (select id, a.name from a join b using(id)) 
select * from a 
where id > (select max(id) from ab) 
except select * from ab; 

出力:

20|Johnny 
21|James 
22|Bart 
0

次の行b最大の対応する値よりも大きくされているaからすべての行を取得します。

あなたはすべての値、何も存在しない場合でも、その後、私はこれがそうなると思う含める場合:

select a.* 
from a 
where a.id > all (select b.id from b where a.a_field = b.b_field) 
+0

;それは近いですが、私はそれが私が欲しいものだとは思いません。私の質問は少しばかりですが、 'b.id'ではなく' a.id'と 'a.id'をもう一度比較したいと思っています。どういうわけか私は参加してこれを行う方法を見ていると思うが、わからない。 – phil

関連する問題