0

以下のこの方法を使用して、これらのテーブルを結合するクエリを作成しようとしています。ただし、結果が繰り返され、正しくリンクされていません。同じ評価のコメントのように、約 4/5 の異なる結果などになります。3 を期待しているときに 18 のような結果が生成されます。誰かがこの問題について喜んで助けてくれますか?

SELECT a.Company_name, 
       f.Job_ID, 
       f.Job_Name, 
       b.User_Name, 
       c.Comments, 
       c.Reliability, 
       c.Rating
FROM company a, 
     Users b, 
     Ratings c, 
     UserCompJobRating d,
     Company_Job e, 
     Jobs f
WHERE d.Comp_job_ID = e.Comp_Job_ID
     AND b.users_ID = d.users_ID
     AND c.Rating_ID = d.Rating_ID;

どうもありがとう、

アンドリュー

わかりましたこれを試してみましたが、e.Users_IDは「on句」の不明な列であると言っています

SELECT a.Company_name, 
   b.Job_ID, 
   b.Job_Name, 
   c.User_Name, 
   d.Comments, 
   d.Reliability, 
   d.Rating
FROM Company a, UserCompJobRating e, Jobs b
INNER JOIN Users c
   ON c.Users_ID = e.Users_ID
inner join Company_Job f
    on e.Comp_Job_ID = f.Comp_Job_ID
inner join Ratings d
    on d.Rating_ID = e.Rating_ID;

私は近くにいると思いますが、同時に離れていますか?

もう少し情報を提供しようとします:

UserCompJobRating には主キー UCJR_ID と、Comp_Job_ID、Users_ID、Rating_ID の 3 つの外部キーがあります。

Company_Job テーブルを主キー Comp_Job_ID、および 2 つの外部キー Job_ID、Company_ID として使用

評価テーブルには主キーとして Rating_ID だけがあり、残りは評価情報に関係するだけです

Users テーブルには、主キーとして Users_ID と基本的なユーザー情報アドレスなどがあります。

Jobs テーブルには、Job_ID プライマリ キーと、名前、価格などのジョブに関する基本情報があります。

Company テーブルには、主キーとしての Company_ID と、Users テーブルと同様の基本的な会社情報があります。

定義は次のとおりです。

CREATE TABLE `company` (
  `Company_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Company_Name` varchar(45) NOT NULL,
  `CAddress` varchar(45) NOT NULL,
  `CTown` varchar(45) NOT NULL,
  `CPostcode` varchar(12) NOT NULL,
  `CTelephone` varchar(45) NOT NULL,
  PRIMARY KEY (`Company_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1

CREATE TABLE `company_job` (
  `Comp_Job_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Company_ID` int(11) NOT NULL,
  `Job_ID` int(11) NOT NULL,
  PRIMARY KEY (`Comp_Job_ID`),
  KEY `Company_ID_idx` (`Company_ID`),
  KEY `Job_ID_idx` (`Job_ID`),
  CONSTRAINT `Company_ID` FOREIGN KEY (`Company_ID`) REFERENCES `company` (`Company_ID`) ON DELETE NO ACTION ON         UPDATE NO ACTION,
  CONSTRAINT `Job_ID` FOREIGN KEY (`Job_ID`) REFERENCES `jobs` (`Job_ID`) ON DELETE NO ACTION ON UPDATE NO     ACTION

CREATE TABLE `jobs` (
  `Job_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Job_Name` varchar(45) NOT NULL,
  `Job_Cost` varchar(45) DEFAULT NULL,
  `Job_Avg_Time` varchar(45) DEFAULT NULL,
  `Job_Avg_Cost` varchar(45) DEFAULT NULL,
  `Job_Description` varchar(45) NOT NULL,
  `Company_ID` int(11) NOT NULL,
  PRIMARY KEY (`Job_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

CREATE TABLE `ratings` (
  `Rating_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Comments` varchar(200) DEFAULT NULL,
  `Cost` varchar(45) DEFAULT NULL,
  `Reliability` varchar(45) DEFAULT NULL,
  `Rating` int(11) DEFAULT NULL,
  PRIMARY KEY (`Rating_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

CREATE TABLE `usercompjobrating` (
  `UCJR_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Comp_Job_ID` int(11) DEFAULT NULL,
  `Rating_ID` int(11) DEFAULT NULL,
  `Users_ID` int(11) DEFAULT NULL,
  PRIMARY KEY (`UCJR_ID`),
  KEY `Comp_Job_ID_idx` (`Comp_Job_ID`),
  KEY `Rating_ID_idx` (`Rating_ID`),
  KEY `User_ID_idx` (`Users_ID`),
  CONSTRAINT `Comp_Job_ID` FOREIGN KEY (`Comp_Job_ID`) REFERENCES `company_job` (`Comp_Job_ID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `Rating_ID` FOREIGN KEY (`Rating_ID`) REFERENCES `ratings` (`Rating_ID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `Users_ID` FOREIGN KEY (`Users_ID`) REFERENCES `users` (`Users_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

CREATE TABLE `users` (
  `Users_id` int(11) NOT NULL AUTO_INCREMENT,
  `User_Name` varchar(45) NOT NULL,
  `UAddress` varchar(45) NOT NULL,
  `UTown` varchar(45) NOT NULL,
  `UPostcode` varchar(45) NOT NULL,
  `UTelephone` varchar(45) NOT NULL,
  `UDOB` varchar(45) NOT NULL,
  PRIMARY KEY (`Users_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
4

2 に答える 2

1

明確にする必要があるのは、テーブル ジョブの company_id とは何ですか?

select ... (necessary fields to select)
from company c
join company_job cj using (company_id)
join jobs j using (job_id)
join usercompjobrating ucjr using (comp_job_id)
join ratings using (rating_Id)
join users using (users_id)
于 2013-07-24T04:57:28.393 に答える
1

クエリは次のようにする必要があります。つまり、このフォームを使用します。

SELECT a.Company_name, 
   f.Job_ID, 
   f.Job_Name, 
   b.User_Name, 
   c.Comments, 
   c.Reliability, 
   c.Rating
FROM company a
    INNER JOIN Users b
       ON a.???? = b.???

私はあなたのテーブル定義を持っていないので、JOIN 条件についてはお手伝いできません。テーブルの定義を見せていただければ、お手伝いできます。

アップデート:

したがって、テーブル構造に基づいて、次のようなものを探します。

SELECT *
FROM company cmp
INNER JOIN company_job cmpjb
    ON cmp.Company_ID = cmpjb.Company_ID
INNER JOIN jobs jb
    ON cmpjb.Job_ID = jb.Job_ID
INNER JOIN usercompjobrating ucmpjbr
    ON ucmpjbr.Comp_Job_ID = ucmpjbr.Comp_Job_ID
INNER JOIN users usr 
    ON usr.Users_id = ucmpjbr.Users_ID
INNER JOIN ratings rat
   ON rat.Rating_ID = ucmpjbr.Rating_ID

フォルダ テーブルの他のテーブルには主キー/外部キーの関係がないため、この結合ではフォルダ テーブルを使用できないことに注意してください。

このクエリを注意深く分析し、詳細を理解する必要がある場合はお知らせください。

于 2013-07-24T02:07:30.977 に答える