PHP SQL内部联接或联盟

时间:2016-03-01 17:29:32

标签: mysql

我想从两个不同的表中选择不同的字段我的用户表和我的地址表如下所示:

我的用户表:

CREATE TABLE IF NOT EXISTS `users` (
  `ID` int(3) NOT NULL AUTO_INCREMENT,
  `AccountNumber` int(8) NOT NULL,
  `FirstName` text NOT NULL,
  `LastName` text NOT NULL,
  `EmailAddress` varchar(200) NOT NULL,
  `Password` varchar(200) NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `AccountNumber` (`AccountNumber`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `users` (`ID`, `AccountNumber`, `FirstName`, `LastName`, `EmailAddress`, `Password`) VALUES
(1, 123456, 'test', 'test', 'test@test.ac.uk', '$2y$10$/j9nTE5ugmyrWuV8VNWFxe5iHInqyaTwxt5wDaxyQwPUZTDDjqNKm');

我的地址表:

CREATE TABLE IF NOT EXISTS `address` (
  `AddID` int(4) NOT NULL AUTO_INCREMENT,
  `HouseNumber` int(11) NOT NULL,
  `StreetName` varchar(200) NOT NULL,
  `City` varchar(200) NOT NULL,
  `Postcode` varchar(8) NOT NULL,
  `AccountNumber` int(8) NOT NULL,
  PRIMARY KEY (`AddID`),
  KEY `AccountNumber` (`AccountNumber`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `address` (`AddID`, `HouseNumber`, `StreetName`, `City`, `Postcode`, `AccountNumber`) VALUES
(1, 123, 'Some Road', 'someCity', 'b66', 123456);

ALTER TABLE `address`
  ADD CONSTRAINT `address_ibfk_1` FOREIGN KEY (`AccountNumber`) REFERENCES `users` (`AccountNumber`);

我成功地使用了以下内连接:

SELECT * FROM users INNER JOIN address ON users.AccountNumber=address.AccountNumber 

然而,这似乎也检索了自动递增的ID以及我不想要的密码字段。

我尝试了联合,但不断收到有关不同列数的错误。我如何将我的select语句更改为仅从users表中检索FirstName,LastName和EmailAddress,并根据存储在两个表中的帐号从地址表中检索HouseNumber,Street,City和Postcode。

任何信息将不胜感激 谢谢!

2 个答案:

答案 0 :(得分:2)

试试这个你会得到结果

SELECT FirstName,LastName,EmailAddress,HouseNumber, 
Street, City, Postcode FROM users 
INNER JOIN address ON users.AccountNumber=address.AccountNumber

答案 1 :(得分:1)

而不是select *,只列出你想要的列

SELECT u.FirstName,u.LastName,u.EmailAddress,a.HouseNumber,a.StreetName,a.City,a.Postcode 
FROM users u 
INNER JOIN address a 
ON u.AccountNumber=a.AccountNumber 

从那里你可以添加一个where语句,如果你想将它限制为一个AccountNumber:

SELECT u.FirstName,u.LastName,u.EmailAddress,a.HouseNumber,a.StreetName,a.City,a.Postcode 
FROM users u 
INNER JOIN address a 
ON u.AccountNumber=a.AccountNumber 
WHERE u.AccountNumber=12345