A表:
ID name
------
1 ABC
2 CDE
3 FGHB 表:
F1 F2 F3
--------
1 2 张三
3 1 李四
其中F1,F2的值是A表中ID字段的值,
现在需要用SELECT 语句取出B 表的值,并根据F1,F2的值取出A表中name字段对应的值,该如何写SQL语句呢?
我使用SELECT A.*,B.* FROM A INNER JOIN B ON (A.ID=B.F1)只能取出F1对应的name值,对于F2对应的name值不知道如何取出,请教大家!!
谢谢!!!
ID name
------
1 ABC
2 CDE
3 FGHB 表:
F1 F2 F3
--------
1 2 张三
3 1 李四
其中F1,F2的值是A表中ID字段的值,
现在需要用SELECT 语句取出B 表的值,并根据F1,F2的值取出A表中name字段对应的值,该如何写SQL语句呢?
我使用SELECT A.*,B.* FROM A INNER JOIN B ON (A.ID=B.F1)只能取出F1对应的name值,对于F2对应的name值不知道如何取出,请教大家!!
谢谢!!!
解决方案 »
- tstringcriid
- 求助,一个搞了很久的问题,各位大哥能否帮我调试一下!,谢谢!
- spcomm控件传输慢
- 问一个菜鸟问题
- directx中的dircetdraw的问题
- 请问如何启动另一个程序?
- 在IntraWeb怎样实现文件下载功能?
- 这个论坛是学习DELPHI的好地方
- "::"符号在程序中是什么意思?
- 对Access2000库进行SQL语句汇总时出现Acess violation at address 1B04106A in module 'MSJet40.DLL' 是什么意思?怎样解决?
- fastreport2和3哪个版本好一些?fastreport能打印非常复杂的stringgrid吗?大家探讨一下
- ListView的列头怎么变灰了哦?
SELECT b1.name as F1_Name, b2.name as F2_Name, A.F3 FROM A
inner join B b1 on A.F1 = b1.ID
inner join B b2 on A.F2 = b2.ID
yyfhz(火山),你试过吗?能不能把结果告诉我?谢谢
----------------
|ABC | CDE | 张三|
-----------------
|FGH | ABC | 李四|
----------------谢谢snowredhxh(梦醒了),我先试试
select C.*, A.name from(select B.*, A.name from B left join A on B.F2=A.id) as C left join on A as aa on C.F1=aa.id
错误信息:
fmSQLEditor.Query:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 24.
select.
难道这个地方不对?我用的interbase6.5
from a as a1,a as a2,b
where b.F1=a1.ID and b.F2=a2.ID
select a1.name as a1name,a2.name as a2name,b.F3
from a as a1,a as a2,b
where b.F1=a1.ID and b.F2=a2.ID
select B.*, A.name from B left join A on B.F2=A.id 括号中这个是正确的,但放在括号中就不能通过了
应该是
SELECT a1.name as F1_Name, a2.name as F2_Name, B.F3
FROM B
inner join A a1 on B.F1 = a1.ID
inner join A a2 on B.F2 = a2.ID
按照你的写法,得到的结果是:
ABC ABC 李四
CDE CDE 张三好像前一个结果被第二个给覆盖了?
希望的结果是
------------------------------
|ABC | CDE | 张三|
-------------------------------
|FGH | ABC | 李四|
------------------------------
我的interbase好像有点问题,表名和字段名都要加"才能正确运行,例如你给我的语句:
SELECT "A"."name" as F1_Name, "A"."name" as F2_Name, "B"."F3"
FROM "B"
inner join "A" "a1" on "B"."F1" = "a1"."id"
inner join "A" "a2" on "B"."F2" = "a2"."id"要这样才不报错,不然就说找不到表或字段什么的错误,晕的很
我的结果怎么会和你的不一样呢?
你在查询的时候应该用别名吧?否则大家都是"A" 数据库是不好辨别是哪个"A"表的。
试试下面的语句:
SELECT "a1"."name" as F1_Name, "a2"."name" as F2_Name, "B"."F3"
FROM "B"
inner join "A" "a1" on "B"."F1" = "a1"."id"
inner join "A" "a2" on "B"."F2" = "a2"."id"ps: 8好意思,没用过Interbase,刚装了6.5,可是登录不上去,报账号密码未注册的作用。Interbase的初始化账号密码难道不是SYSDBA吗?
From
(Select A.ID, A.Fname, B.F3 From A Join B on B.F1 = A.ID) aa Join
(Select A.ID, A.Fname, B.F2, B.F3 From A Join B on B.F2 = A.ID) bb on aa.F3 = bb.F3
SQL> create table testa(ID number, name varchar2(10));Table createdSQL> insert into testa values(1, 'ABC');1 row insertedSQL> insert into testa values(2, 'CDE');1 row insertedSQL> insert into testa values(3, 'FGH');1 row inserted
--testb:
SQL> create table testB(F1 number, F2 NUMBER, F3 varchar2(10));Table created
SQL> insert into testb values(1, 2, 'zhangsang');1 row insertedSQL> insert into testb values(3, 1, 'lisi');1 row inserted
数据表为:
SQL> select * from testa; ID NAME
---------- ----------
1 ABC
2 CDE
3 FGH
SQL> select * from testb; F1 F2 F3
---------- ---------- ----------
1 2 zhangsang
3 1 lisisql语句如下:
SQL> select a.*, (select name from testa where id = a.F1 and rownum = 1) name1, (select name from testa where id = a.F2 and rownum = 1) name1
from testb a;
得到的结果:
F1 F2 F3 NAME1 NAME1
---------- ---------- ---------- ---------- ----------
1 2 zhangsang ABC CDE
3 1 lisi FGH ABC
----------------
不知道楼主想要的是不是这个结果(以上在oracle10g,pl/sql6.0上测试成功)
给分!