[英]Select query in two tables in MySQL
我正在運行此查詢
select * from user_meta JOIN user ON user_meta.userid=user.userid where user_meta.userid=9
但這並不是我想要的,它返回多行。
我的一個表看起來像這個名字user_meta
:
umeta_id userid meta_key meta_value
1 9 mobile 123324
2 9 address some address
3 9 city some city
4 9 country some country
5 9 occupation some details
6 9 website someurl
7 9 mobile 123324
8 9 address some address
9 9 city some city
10 10 country some country
11 10 occupation some details
12 10 website someurl
另一個表看起來像這個名字user
:
userid username fullname email role
9 someuser john Doe 123324@gmail.com admin
如何讓它選擇查詢,以便可以從兩個表中獲取與userid 9
相關的所有值,並使其看起來像這樣
期望的輸出:
userid username fullname email role Mobile address city country occupation website
9 someuser john Doe 123324@gmail.com admin 123123 someaddres Somecity somecountry some details someurl
謝謝! (提前!)
SELECT
*
FROM
user
INNER JOIN
user_meta ON user_meta.userid = user.userid
WHERE
user.userid = 9
以上答案與您的初始要求有關。 但是根據你的新要求,它不能通過簡單的查詢完成,它需要是動態的,在這里我為你創建了演示,你可以使用這個
SELECT * FROM user_meta um, user u WHERE um.userid = u.userid
select
user_meta.umeta_id,
user_meta.userid,
user_meta.meta_key,
user_meta.meta_value,
user.userid,
user.username,
user.fullname,
user.email,
user.role
from
user_meta
LEFT JOIN
user ON user_meta.userid = user.userid
where
user_meta.userid = 9
這很簡單:
select * from user_meta, user where user_meta.userid=9
and user_meta.userid=user.userid
將它減少到一行的唯一真正方法是使用聚合函數
例如,在字段中對詳細信息進行分組
SELECT user.userid, user.username, user.fullname, user.email, user.role, GROUP_CONCAT(CONCAT_WS('-', user_meta.umeta_id, user_meta.meta_key, user_meta.meta_value))
FROM user_meta
INNER JOIN user ON user_meta.userid=user.userid
WHERE user_meta.userid=9
GROUP BY user.userid, user.username, user.fullname, user.email, user.role
如果您只想要user_meta表,則所有值都表示使用此值。
select meta.* from user_meta AS meta JOIN user AS us ON meta.userid=us.userid where meta.userid=9
如果您只想要用戶表,則所有值都表示使用此值。
select us.* from user_meta AS meta JOIN user AS us ON meta.userid=us.userid where meta.userid=9
如果你想要兩種方式都提到這樣的話
select
meta.umeta_id,
meta.userid, // only one userid is enough
meta.meta_key,
meta.meta_value,
us.username,
us.fullname,
us.email,
us.role from user_meta JOIN
user ON meta.userid = us.userid
SELECT * FROM USERS U INNER JOIN Meta_Users M ON U.userid = M.userid
在哪里U.userid = 9
為您提供所需的輸出(但這不靈活,如果您添加要輸出的更多詳細信息,則無需更改即可): -
SELECT user.userid,
user.username,
user.fullname,
user.email,
user.role,
mobile_meta.meta_value AS `Mobile`,
address_metameta_value AS `Address`,
city_metameta_value AS `City`,
country_metameta_value AS `Country`,
occupation_metameta_value AS `Occupation`,
website_metameta_value AS `Website`
FROM user
LEFT OUTER JOIN user_meta AS mobile_meta ON mobile_meta.userid=user.userid AND mobile_meta.meta_key = 'mobile'
LEFT OUTER JOIN user_meta AS address_meta ON address_meta.userid=user.userid AND address_meta.meta_key = 'address'
LEFT OUTER JOIN user_meta AS city_meta ON city_meta.userid=user.userid AND city_meta.meta_key = 'city'
LEFT OUTER JOIN user_meta AS country_meta ON country_meta.userid=user.userid AND country_meta.meta_key = 'country'
LEFT OUTER JOIN user_meta AS occupation_meta ON occupation_meta.userid=user.userid AND occupation_meta.meta_key = 'occupation'
LEFT OUTER JOIN user_meta AS website_meta ON website_meta.userid=user.userid AND website_meta.meta_key = 'website'
WHERE user.userid=9
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.