サブクエリなしで2つのテーブルの結合から最大IDの行を取得する

user606669:

これら2つのテーブルにJOINクエリを実装するのに問題があります。

製品表には製品が含まれています。ProductInstanceテーブルには、時間の経過とともに価格が変更された製品のバージョンが含まれています。

nullであっても、storeIdごとに1つの行があるはずですが、最も高いproductInstanceIdが含まれている必要があります。

ここに画像の説明を入力してください

私のクエリは各製品の最大IDを持つ行を取得できますが、StoreIdを無視します。

Select P.id as productId, PI.id as productInstanceId, P.name, PI.storeId, PI.price from products as P

LEFT JOIN productInstances AS PI
ON PI.productId = P.id

LEFT JOIN productInstances AS PI2
ON (PI2.productId = P.id and (PI.id < PI2.id )  )
WHERE PI2.id IS NULL
AND PI.id IS NOT NULL

テーブルを作成します。

CREATE SCHEMA IF NOT EXISTS `TestDB` DEFAULT CHARACTER SET utf8 ;
USE `TestDB` ;

-- -----------------------------------------------------
-- Table `TestDB`.`products`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `TestDB`.`products` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  `description` VARCHAR(45) NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `TestDB`.`productInstances`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `TestDB`.`productInstances` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `storeId` INT NULL,
  `productId` INT NOT NULL,
  `price` INT NOT NULL,
  PRIMARY KEY (`id`, `productId`),
  INDEX `fk_productInstances_products_idx` (`productId` ASC),
  CONSTRAINT `fk_productInstances_products`
    FOREIGN KEY (`productId`)
    REFERENCES `TestDB`.`products` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

このクエリを使用してテストデータを挿入する

INSERT INTO `TestDB`.`products` (`name`) VALUES ('Product 1');
INSERT INTO `TestDB`.`products` (`name`) VALUES ('Product 2');

INSERT INTO `TestDB`.`productInstances` (`storeId`, `productId`, `price`) VALUES ('1', '1', '111');
INSERT INTO `TestDB`.`productInstances` (`productId`, `price`) VALUES ('1', '122');
INSERT INTO `TestDB`.`productInstances` (`productId`, `price`) VALUES ('1', '133');
INSERT INTO `TestDB`.`productInstances` (`storeId`, `productId`, `price`) VALUES ('1', '1', '115');
INSERT INTO `TestDB`.`productInstances` (`storeId`, `productId`, `price`) VALUES ('2', '1', '155');
逝去:

MySQLの場合8.0+を使用できROW_NUMBER()、それぞれの最大のIDを取得するには、ウィンドウ関数をproductidstoreid

select p.id productId, 
       pi.id productInstanceId, 
       p.name, 
       pi.storeId, 
       pi.price 
from products p 
left join (
  select *, row_number() over (partition by storeId, productId order by id desc) rn
  from productInstances
) pi on pi.productId = p.id and pi.rn = 1

以前のバージョンでは、相関サブクエリで同じことができます。

select p.id as productId, 
       pi.id as productInstanceId, 
       p.name, 
       pi.storeId, 
       pi.price 
from products p 
left join (
  select pi.* from productInstances pi
  where pi.id = (
    select max(id) 
    from productInstances 
    where productId = pi.productId and storeId <=> pi.storeId 
  )
) pi on pi.productId = p.id

デモをご覧ください
結果:

> productId | productInstanceId | name      | storeId | price
> --------: | ----------------: | :-------- | ------: | ----:
>         1 |                 3 | Product 1 |    null |   133
>         1 |                 4 | Product 1 |       1 |   115
>         1 |                 5 | Product 1 |       2 |   155
>         2 |              null | Product 2 |    null |  null

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

結合クエリとサブクエリを使用して2つのテーブルから行を取得する

分類Dev

サブクエリで2つのテーブルを結合しますか?

分類Dev

3つのテーブルを結合し、サブクエリで結合を実行する方法は?

分類Dev

1つのphp関数で2つの異なるテーブルから2つのmysqlクエリを結合しようとする際の問題

分類Dev

2つの異なるテーブルからの2つのクエリを結合する方法

分類Dev

2つの異なるmysqlテーブルから特定のクエリ結果を取得します

分類Dev

サブクエリで結合からのテーブルを使用するSQL

分類Dev

Where条件が異なる1つのテーブルから2つのクエリの結果を取得する

分類Dev

2つのテーブルを結合し、テーブルの1つから1行だけを保持するようにクエリします

分類Dev

日付の最大値のIDを取得する方法を3つのテーブルで内部結合しますか?

分類Dev

同じテーブルから作成された2つのサブクエリを結合する

分類Dev

サブクエリや自己結合なしで最大値を持つ複数の行を取得することは可能ですか?-MYSQL

分類Dev

直接相関していないテーブルのサブクエリからSQLの列を結合する

分類Dev

Railsアクティブレコードクエリで結合を使用しながら2番目のテーブルの結果を取得する方法

分類Dev

3つのテーブルを結合し、2番目と3番目のテーブルからデータを取得するMySQLクエリ

分類Dev

mysqlでサブクエリを使用して2つのテーブルを結合する

分類Dev

2つの異なるテーブルから結合クエリを実行したいのですが、両方のテーブルからの出力が必要です

分類Dev

3つのテーブルからSQLで2つのクエリを結合する方法は?

分類Dev

異なるテーブルからの2つのSQLクエリを結合する

分類Dev

MySQL JOINクエリヘルプ:2つのテーブルを、異なる右側のテーブル行を降順で結合します

分類Dev

異なる月と合計値で同じテーブルの2つのクエリを結合します

分類Dev

サブクエリから2つの結果を取得する

分類Dev

SQLの結合クエリを使用して、3番目のテーブルを持つ2つの異なるテーブルから2つの列のカウントを取得します

分類Dev

同じテーブルから、異なるフィルターを使用して、2つのSelect sum SQLクエリを結合できますか?

分類Dev

内部結合、エイリアスを使用して2つのテーブルからデータを取得するためのMySQLクエリ

分類Dev

結合する共通の列がない2つのテーブルからselectクエリを使用してクエリを挿入します

分類Dev

2つのテーブルを結合しながら2番目のテーブルから上位1行を取得する方法:SQL Server 2014

分類Dev

1つのクエリで2つの異なるテーブルからデータを取得する

分類Dev

同じクエリで異なる情報を持つ2つのMySQLテーブルを結合します

Related 関連記事

  1. 1

    結合クエリとサブクエリを使用して2つのテーブルから行を取得する

  2. 2

    サブクエリで2つのテーブルを結合しますか?

  3. 3

    3つのテーブルを結合し、サブクエリで結合を実行する方法は?

  4. 4

    1つのphp関数で2つの異なるテーブルから2つのmysqlクエリを結合しようとする際の問題

  5. 5

    2つの異なるテーブルからの2つのクエリを結合する方法

  6. 6

    2つの異なるmysqlテーブルから特定のクエリ結果を取得します

  7. 7

    サブクエリで結合からのテーブルを使用するSQL

  8. 8

    Where条件が異なる1つのテーブルから2つのクエリの結果を取得する

  9. 9

    2つのテーブルを結合し、テーブルの1つから1行だけを保持するようにクエリします

  10. 10

    日付の最大値のIDを取得する方法を3つのテーブルで内部結合しますか?

  11. 11

    同じテーブルから作成された2つのサブクエリを結合する

  12. 12

    サブクエリや自己結合なしで最大値を持つ複数の行を取得することは可能ですか?-MYSQL

  13. 13

    直接相関していないテーブルのサブクエリからSQLの列を結合する

  14. 14

    Railsアクティブレコードクエリで結合を使用しながら2番目のテーブルの結果を取得する方法

  15. 15

    3つのテーブルを結合し、2番目と3番目のテーブルからデータを取得するMySQLクエリ

  16. 16

    mysqlでサブクエリを使用して2つのテーブルを結合する

  17. 17

    2つの異なるテーブルから結合クエリを実行したいのですが、両方のテーブルからの出力が必要です

  18. 18

    3つのテーブルからSQLで2つのクエリを結合する方法は?

  19. 19

    異なるテーブルからの2つのSQLクエリを結合する

  20. 20

    MySQL JOINクエリヘルプ:2つのテーブルを、異なる右側のテーブル行を降順で結合します

  21. 21

    異なる月と合計値で同じテーブルの2つのクエリを結合します

  22. 22

    サブクエリから2つの結果を取得する

  23. 23

    SQLの結合クエリを使用して、3番目のテーブルを持つ2つの異なるテーブルから2つの列のカウントを取得します

  24. 24

    同じテーブルから、異なるフィルターを使用して、2つのSelect sum SQLクエリを結合できますか?

  25. 25

    内部結合、エイリアスを使用して2つのテーブルからデータを取得するためのMySQLクエリ

  26. 26

    結合する共通の列がない2つのテーブルからselectクエリを使用してクエリを挿入します

  27. 27

    2つのテーブルを結合しながら2番目のテーブルから上位1行を取得する方法:SQL Server 2014

  28. 28

    1つのクエリで2つの異なるテーブルからデータを取得する

  29. 29

    同じクエリで異なる情報を持つ2つのMySQLテーブルを結合します

ホットタグ

アーカイブ