22

重複するエントリを持たずに、これら2つのステートメントを1つに結合する方法はありますか?

SELECT * FROM Seq where JULIANDAY('2012-05-25 19:02:00')<=JULIANDAY(TimeP) 
         order by TimeP limit 50

SELECT * FROM Seq where JULIANDAY('2012-05-29 06:20:50')<=JULIANDAY(TimeI)  
         order by TimeI limit 50

私の最初の明白な試みは、SQLITE(構文エラー:制限句はUNIONの前ではなく後に来る必要があります)によってサポートされていません:

SELECT * FROM Seq where JULIANDAY('2012-05-25 19:02:00')<=JULIANDAY(TimeP) 
         order by TimeP limit 50
UNION
SELECT * FROM Seq where JULIANDAY('2012-05-29 06:20:50')<=JULIANDAY(TimeI)
         order by TimeI limit 50
4

3 に答える 3

37

サブクエリを使用して、サブクエリ内で制限を実行します。

SELECT  *
FROM    (   SELECT  * 
            FROM    Seq 
            WHERE   JULIANDAY('2012-05-25 19:02:00') <= JULIANDAY(TimeP) 
            ORDER BY TimeP
            LIMIT 50
        )
UNION
SELECT  *
FROM    (   SELECT  * 
            FROM    Seq 
            WHERE   JULIANDAY('2012-05-29 06:20:50') <= JULIANDAY(TimeI) 
            ORDER BY TimeI
            LIMIT 50
        )
于 2012-05-30T08:53:44.507 に答える
8

クエリは段階的に処理されます。

  1. FROM節とすべての結合;
  2. WHERE節とすべての述語。したがってNULL、結果セットに値を表示したい場合OUTERは、セクション内の結合されたテーブル列をフィルター処理しないでください。これにより、クエリが結合WHEREに変わります。INNER
  3. GROUP BYおよびHAVING節;
  4. クエリの組み合わせ:UNION、、、またはINTERSECTEXCEPTMINUS
  5. ORDER BY
  6. LIMIT

したがって、他の人が指摘しているように、前節を使用することは構文的に間違ってORDER BYLIMIT ます UNION。サブクエリを使用する必要があります。

SELECT *
  FROM (SELECT * FROM Seq
         WHERE JULIANDAY('2012-05-25 19:02:00') <= JULIANDAY(TimeP) 
         ORDER BY TimeP LIMIT 50) AS tab1
UNION
SELECT *
  FROM (SELECT * FROM Seq
         WHERE JULIANDAY('2012-05-29 06:20:50') <= JULIANDAY(TimeI)  
         ORDER BY TimeI LIMIT 50) AS tab2;
于 2012-05-30T09:04:16.983 に答える
2
           SELECT * from 
           (SELECT * 
           FROM Seq 
           where JULIANDAY('2012-05-25 19:02:00')<=JULIANDAY(TimeP) 
           order by TimeP limit 50)
           UNION
           SELECT * from 
           (SELECT * 
           FROM Seq 
           where JULIANDAY('2012-05-29 06:20:50')<=JULIANDAY(TimeI)
           order by TimeI limit 50)

これはトリックを行う必要があります

于 2012-05-30T08:56:11.700 に答える