我有3个表,结果表应该有所有三个表中的列基于第一个表的列user_id
。sql查询从3个表中分离值,基于一列值
回答
假设10,约翰应为15,约翰这看起来像一个非常简单的加入。如果以下型号不正确,请复制,编辑并添加到您的问题。
drop table if exists t1,t2,t3;
create table t1(u_id int, name varchar(10), prd int);
create table t2(u_id int, temp int);
create table t3(u_id int, Office int);
insert into t1 values (10,'ram',1), (15,'john',1),(20,'sat',1),(12,'peter',1);
insert into t2 values (10,32),(20,42),(15,25),(12,32);
insert into t3 values (20,56),(10,57),(15,56),(12,57);
这个查询
select t1.*,t2.*,t3.*
from t1
join t2 on t2.u_id = t1.u_id
join t3 on t3.U_id = t1.u_id
order by t1.u_id;
产生以下结果
+------+-------+------+------+------+------+--------+
| u_id | name | prd | u_id | temp | u_id | Office |
+------+-------+------+------+------+------+--------+
| 10 | ram | 1 | 10 | 32 | 10 | 57 |
| 12 | peter | 1 | 12 | 32 | 12 | 57 |
| 15 | john | 1 | 15 | 25 | 15 | 56 |
| 20 | sat | 1 | 20 | 42 | 20 | 56 |
+------+-------+------+------+------+------+--------+
4 rows in set (0.00 sec)
如果模型看起来像这样
drop table if exists t1,t2,t3;
create table t1(u_id int, name varchar(10), prd int);
create table t2(u_id int, temp int);
create table t3(u_id int, Office int);
insert into t1 values (10,'ram',1), (15,'john',1),(20,'sat',1),(12,'peter',1);
insert into t2 values (10,32),(20,42),(10,25),(12,32);
insert into t3 values (20,56),(10,57),(10,60),(10,56),(12,57);
您可能需要模拟一个完整的加盟
select t1.u_id,t1.name,t2temp,t3office
from t1
join
(
select t2.u_id as t2id, t2.temp as t2temp, t3.u_id as t3uid,t3.office as t3office
from
(
select t2.*,if(t2.u_id <> @p ,@rn:=1,@rn:[email protected]+1) rn,@p:=t2.u_id from t2 ,(select @rn:=0,@p:=0) rn order by t2.u_id
) t2
left outer join
(
select t3.*,if(t3.u_id <> @p1 ,@rn1:=1,@rn1:[email protected]+1) rn,@p1:=t3.u_id from t3 ,(select @rn1:=0,@p1:=0) rn1 order by t3.u_id
) t3 on t3.u_id = t2.u_id and t2.rn = t3.rn
union all
select t2.u_id as t2id, t2.temp as t2temp, t3.u_id as t3uid,t3.office as t3office
from
(
select t2.*,if(t2.u_id <> @p ,@rn:=1,@rn:[email protected]+1) rn,@p:=t2.u_id from t2 ,(select @rn:=0,@p:=0) rn order by t2.u_id
) t2
right outer join
(
select t3.*,if(t3.u_id <> @p1 ,@rn1:=1,@rn1:[email protected]+1) rn,@p1:=t3.u_id from t3 ,(select @rn1:=0,@p1:=0) rn1 order by t3.u_id
) t3 on t3.u_id = t2.u_id and t2.rn = t3.rn
where t2.rn is null
) z on t1.u_id = t2id or t1.u_id = t3uid
order by t1.u_id
+------+-------+--------+----------+
| u_id | name | t2temp | t3office |
+------+-------+--------+----------+
| 10 | ram | NULL | 56 |
| 10 | ram | 32 | 57 |
| 10 | ram | 25 | 60 |
| 12 | peter | 32 | 57 |
| 20 | sat | 42 | 56 |
+------+-------+--------+----------+
5 rows in set (0.00 sec)
谢谢..我可以得到的结果..问题是在表1 u_id(10)只出现一次,但在表2 u_id(10)出现2times和列temp有两个不同的值为u_id(10)和在表3 u_id发生3倍所以输出即将得到的结果集计数2 * 3 = 6为u_id(10)..正确的结果应为3,而不是6为u_id(10)..如何做到这一点。谢谢, – karan
伟大的帮助谢谢..现在我必须将两列中的字符串连接成一列,它应该是不同的,基于u_id ..(例如) | u_id |名称| + ------ + ------- + | 10 |公羊〜32-25 |这是为甲骨文....这将是一个很大的帮助,等待你的答复谢谢。 – karan
即时通讯使用LISTAGG功能,并获得输出..但无法满足我的要求concatenate 2列..请尝试解决这个问题。 – karan
- 1. 基于python3中的值分离列表
- 2. SQL PIVOT查询,基于值的列
- 3. SQL:基于列的值嵌套查询
- 4. SQL查询校验值在查找存在基于另一个列值
- 5. 的SQL Server:查找基于值一列
- 6. 基于多个列的值从一列获取值的列表
- 7. 从另一个表中打印两列值的SQL查询
- 8. 基于另一个输入值的jquery自动完成sql查询列表
- 9. SQL查询所需(基于列值,行值应加载)
- 10. SQL查询:选择记录,其中3个值都在3列
- 11. 用于检查表列中值的SQL的SQL查询
- 12. 基于2列的SQL查询唯一值
- 13. SQL - 基于来自另一查询的值更新列
- 14. 基于等值列值查询分段结果
- 15. SQL查询从表中查找多个列值的计数?
- 16. 选择基于另一个表的值从另一个表列
- 17. 更新查询以基于另一个表中的值更改一个表中列的现有值
- 18. 如何从另一个表中查找基于查找的值?
- 19. SQL查询的另一列,让每列分组最低的3个值
- 20. SQL查询返回基于价值层
- 21. 基于一个变量:SQL查询来从一列取多个值的数据或从该列
- 22. 从列表框值创建一个sql查询asp.net c#
- 23. 从查询列表中查询每个类型的SQL查询最高1值?
- 24. SQL查询来从一个表基于来自不同的表
- 25. 基于一列的唯一值分离树回归模型
- 26. 基于另一个表中列值的Spotfire控制表值
- 27. 我需要一个SQL查询从一列多列值
- 28. 是基于另一个表ID的查找返回值SQL查询
- 29. SQL在一个表中查找基于从另一个值查找的值的记录
- 30. 如何查询一些不同的值,基于另一个值
请正确格式化您的问题以提高可读性。 –
Oracle或Mysql?为什么有两个用户具有相同的user_id(10)? – Nitish
MYSQL ..对不起,您可能会考虑单一时间 – karan