0

我正在尝试使用下面的这种方法创建一个查询以将这些表连接在一起。但是,它正在重复结果,并且它们没有正确连接。因为在相同的评级评论中,大约有 4/5 不同的结果等。当我期待 3 时,它会产生 18ish 的结果。有人愿意帮助我解决这个问题吗?

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_ID 作为主键和基本用户信息地址等

Jobs Table 有一个 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 回答