[英]mysql - join select data from two different fields in table
我有兩個表:
朋友表( UserID
, FriendID
)和
users表( UserID
, FirstName
, LastName
)。
我正在嘗試執行一個SQL查詢,以聯接並提取所有在友誼表中具有UserID
或FriendID
記錄,這些記錄等於用戶的ID,但從另一個UserID
提取FirstName
和LastName
。
例如
朋友表
UserID = 1 | FriendID = 2
UserID = 3 | FriendID = 1
用戶表
UserID = 1 | FirstName = "Bob" | LastName = "Hope"
UserID = 2 | FirstName = "John" | LastName = "Doe"
UserID = 3 | FirstName = "Bill" | LastName = "Murray"
如果我以Bob( UserID
= 1)的身份登錄,試圖通過檢查UserID
1是friends表中的FriendID
還是UserID
在一個查詢中提取所有我的朋友用戶數據( FirstName
和LastName
)。 然后將不是我的ID的相反字段的數據加入。
有任何想法嗎?
-- set the id of the logged in user
set @logged_in = 1;
-- select all the fields from the user table
select users.* from users
-- joined the friends table on the `FriendID`
inner join friends on friends.FriendID = users.UserID
-- filtered by `UserID` on friends table matching logged in user
and friends.UserID = @logged_in -- logged in id
-- union-ed with the users table
union select * from users
-- filtered by the `UserID` being the logged in user
where users.UserID = @logged_in -- logged in id
UserID FirstName LastName
2 John Doe
1 Bob Hope
UserID FirstName LastName
2 John Doe
--
-- Table structure for table `friends`
--
CREATE TABLE IF NOT EXISTS `friends` (
`UserID` int(11) NOT NULL,
`FriendID` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `friends`
--
INSERT INTO `friends` (`UserID`, `FriendID`) VALUES
(1, 2),
(3, 1);
-- --------------------------------------------------------
--
-- Table structure for table `users`
--
CREATE TABLE IF NOT EXISTS `users` (
`UserID` int(11) NOT NULL,
`FirstName` varchar(50) NOT NULL,
`LastName` varchar(50) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `users`
--
INSERT INTO `users` (`UserID`, `FirstName`, `LastName`) VALUES
(1, 'Bob', 'Hope'),
(2, 'John', 'Doe'),
(3, 'Bill', 'Murray');
嘗試這個:
SELECT *
FROM users u
WHERE userid IN ( SELECT userid FROM friends WHERE friendid = 1
UNION ALL
SELECT friendid FROM firends WHERE userid = 1);
這將為您提供:
| USERID | FIRSTNAME | LASTNAME |
---------------------------------
| 2 | John | Doe |
| 3 | Bill | Murray |
Select b.uid as userid, a.firstname, a.lastname
from user a
Inner join (select friendid as uid from friends where userid=:currentUser
Union select userid as uid from friends where friendid=:currentUser) b
在電話上,因此可能需要語法調整。
優化者可能會根據您的真實數據提出不同的加入策略
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.