MySQL多表查询

标签 mysql multiple-tables

有条件的问题:

The question with criteria

如果您能帮助创建满足此条件的 SELECT 语句,我们将不胜感激。我认为正在使用的表格如下。

CREATE TABLE `client` (
  `ClientID` varchar(7) NOT NULL,
  `ClientName` varchar(45) DEFAULT NULL,
  `Street` varchar(100) DEFAULT NULL,
  `City` varchar(45) DEFAULT NULL,
  `State` char(2) DEFAULT NULL,
  `Zip` char(5) DEFAULT NULL,
  PRIMARY KEY (`ClientID`)
)

CREATE TABLE `contact` (
  `ClientID` varchar(7) NOT NULL,
  `ContactName` varchar(45) NOT NULL,
  `ContactPhone` char(17) DEFAULT NULL,
  `ContactEmail` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`ClientID`,`ContactName`),
  CONSTRAINT `FK_ClientContact` FOREIGN KEY (`ClientID`) REFERENCES `client` (`ClientID`)
)

这是我到目前为止所得到的。

SELECT ClientName, contact.ContactName, ContactPhone, ContactEmail, count()
FROM client, contact
GROUP BY ClientName, ContactName, ContactPhone, ContactEmail
ORDER BY ClientName;

其他信息:

CREATE TABLE `event_contact` (
  `ClientID` varchar(7) NOT NULL,
  `ContactName` varchar(45) NOT NULL,
  `EventCode` varchar(12) NOT NULL,
  PRIMARY KEY (`ClientID`,`ContactName`,`EventCode`),
  KEY `FK_EC_Event_idx` (`EventCode`),
  CONSTRAINT `FK_EC_Contact` FOREIGN KEY (`ClientID`, `ContactName`) REFERENCES `contact` (`ClientID`, `ContactName`),
  CONSTRAINT `FK_EC_Event` FOREIGN KEY (`EventCode`) REFERENCES `events` (`EventCode`)
)

CREATE TABLE `events` (
  `EventCode` varchar(12) NOT NULL,
  `EventName` varchar(45) NOT NULL,
  `Description` varchar(150) DEFAULT NULL,
  `EventDate` date DEFAULT NULL,
  `StartTime` time DEFAULT NULL,
  `EndTime` time DEFAULT NULL,
  `Ticket` tinyint(4) DEFAULT NULL,
  `VenueID` char(7) NOT NULL,
  `ClientID` varchar(7) NOT NULL,
  PRIMARY KEY (`EventCode`),
  KEY `FK_Events_Venue_idx` (`ClientID`),
  KEY `FK_Events_Venue` (`VenueID`),
  CONSTRAINT `FK_Events_Client` FOREIGN KEY (`ClientID`) REFERENCES `client` (`ClientID`),
  CONSTRAINT `FK_Events_Venue` FOREIGN KEY (`VenueID`) REFERENCES `venue` (`VenueID`)
) 

最佳答案

此查询将列出每个客户的联系人的详细信息:

SELECT client.ClientName, contact.ContactName, contact.ContactPhone, 
contact.ContactEmail
FROM client, contact
WHERE client.ClientID = contact.ClientID
ORDER BY client.ClientName;

需要使用联接来连接两个表,以获取每个客户的每个联系人。

Group By 不会用于此目的,因为 Group By 只会为每个客户返回一个联系人。问题指出:“列出每个客户联系人的详细信息。”

此外,您还缺少信息。该问题还询问联系人组织的事件数量。我猜这应该是联系人表中的另一列,或者可能是另一个表中的信息。

下面是使用显式联接的查询。

SELECT client.ClientName, contact.ContactName, contact.ContactPhone, 
contact.ContactEmail
FROM CLIENT
INNER JOIN contact ON client.ClientID = contact.ClientID
ORDER BY client.ClientName;

关于MySQL多表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59127957/

相关文章:

mysql - SQL 按不同值排序

MySQL - 'on clause' 中的未知列

mysql - 在mysql中的单个查询中更新多个表

MySQL,多表更新和奇怪的结果

php - CakePHP 递归删除

mysql - 无法在 Django 1.11 中生成迁移

php - CONCAT日期问题

php - 同步更新信息

mysql - subselect 使复杂的查询真的很慢

mysql - SQL CSV 跨表导入/导出发布数据