1

以下のような2つのテーブルがあります

CREATE TABLE projectlist(ProjectId   INT NOT NULL PRIMARY KEY,
                         ProjectName VARCHAR(50),
                         Location    VARCHAR(50));

CREATE TABLE LocationList(LocaId INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
                          ProjectId INT,
                          Location    VARCHAR(50));

表の値は次のとおりです。

INSERT INTO projectlist(ProjectId, ProjectName)
                 VALUES(1, 'Project A'),
                       (2, 'Project B'),
                       (3, 'Project C'),
                       (4, 'Project D'),
                       (5, 'Project E'),
                       (6, 'Project F'),
                       (7, 'Project G'),
                       (8, 'Project H');

INSERT INTO LocationList(ProjectId, Location)
                  VALUES(1, 'Location A'),
                        (1, 'Location C'),
                        (2, 'Location C'),
                        (2, 'Location B'),
                        (2, 'Location A'),
                        (3, 'Location B'),
                        (4, 'Location C'),
                        (5, 'Location D'),
                        (6, 'Location A'),
                        (6, 'Location B'),
                        (7, 'Location B'),
                        (8, 'Location D'),
                        (8, 'Location A');

プロジェクトIDに関連するそれぞれのプロジェクトの最初のLocationList.Locationprojectlist.Locationに挿入する挿入クエリが必要です。

したがって、クエリを実行した後のテーブル projectlist は

   プロジェクト名の場所
    プロジェクト A ロケーション A
    プロジェクト B ロケーション C
    プロジェクト C ロケーション B
    プロジェクト D ロケーション C
    プロジェクト E ロケーション D
    プロジェクト F ロケーション A
    プロジェクト G ロケーション B
    プロジェクト H ロケーション D    

以下のように、LocationList テーブルから最初の場所を取得する SQL クエリを試しました。

 SELECT DISTINCT MNPCL.Location, MNP.ProjectId
   FROM LocationList MNPCL RIGHT OUTER JOIN
        projectlist MNP ON MNP.ProjectId = MNPCL.ProjectId                            
  GROUP BY MNP.ProjectName

プロジェクトリストに挿入するクエリの書き方

返信ありがとう

4

3 に答える 3

1

ここにSQLFiddleのデモがあります

update projectlist 
join 
(
select LocationList.ProjectID,LocationList.Location 
  from LocationList
join 
(select LocationList.ProjectID,min(LocaId) minLocaId 
    from LocationList 
    group by LocationList.ProjectID) l1
        on LocationList.LocaId=l1.minLocaID
 ) l2 on projectList.ProjectID=l2.ProjectID
SET ProjectList.Location=l2.Location
于 2012-12-14T08:16:44.527 に答える
1

試す:

UPDATE projectlist AS prj SET Location = 
(SELECT Location FROM LocationList AS lst WHERE lst.ProjectId = prjProjectId ORDER BY Location DESC LIMIT 1)

プロジェクトには LocationList に複数の場所があり、projectlist テーブルには 1 つの場所しかないため、結果セットを 1 行に制限する必要があります。

于 2012-12-14T08:30:02.710 に答える
0

これはあなたのために働くでしょう...

UPDATE projectlist AS prj SET Location = (
SELECT group_concat(locationlist.Location SEPARATOR ',') as loc FROM `locationlist` left join projectlist using (ProjectId) 
group by locationlist.ProjectId)
于 2012-12-14T09:17:12.990 に答える