Mysql joinsql命令的使用
我有两张桌子——小工具和用法。小工具具有唯一的ID和相应的字段。而用法显示的用法与小工具的旧ID值和新ID值类似Mysql joinsql命令的使用,mysql,join,Mysql,Join,我有两张桌子——小工具和用法。小工具具有唯一的ID和相应的字段。而用法显示的用法与小工具的旧ID值和新ID值类似 Gadgets TABLE ID & gadgetName USAGE TABLE oldID & newID 现在我想在它们之间映射一个input=gadgetName 让田野像你一样 Gadgets ID gadgetName +++ ++++++++++++ id1 nokia id2 motog
Gadgets TABLE
ID & gadgetName
USAGE TABLE
oldID & newID
现在我想在它们之间映射一个input=gadgetName让田野像你一样
Gadgets
ID gadgetName
+++ ++++++++++++
id1 nokia
id2 motog
id3 xiamoi
id4 micromax
用法表如下所示
Usage Table
oldID newID
+++++ ++++++
id1 id2
id2 id3
id3 id4
id2 id4
现在,输入为micromax,我想从gadget表中检索gadgetName,该gadgetName存在于旧ID中,新ID为micromax
与o/p类似,o/p是:
oldIDgadgetName
++++++++++++++++
xiamoi
motog
编辑:
我试过这个:
SELECT gadgets.gadgetName, gadgets.ID FROM usage, gadgets
WHERE usage.oldID IN (
SELECT usage.oldID FROM usage , gadgets
WHERE usage.newID = gadgets.ID AND gadgets.gadgetName= ".$datawon."
)" );
&我没有得到想要的输出。。。
.
我想在此应用join。请指导我。尝试使用join并使用join result作为子查询来获取小工具名称,如:
SELECT gadgetName
FROM Gadgets WHERE id in (
SELECT u.oldId
FROM Gadgets g INNER JOIN usage u
ON g.id = u.newId
WHERE g.gadgetName = 'micromax')
内部查询将返回micromax的旧id,方法是将newId上的id连接到其他用法表中,然后使用您在gadgets表中查找的旧id作为名称。您甚至可以通过在Gadget表上加入两次来完成此操作。一种方法是加入Gadget表两次:
select g2.gadgetName as oldIDgadgetName
from Gadgets g1
join Usage u on g1.ID = u.newID
join Gadgets g2 on g2.ID = u.oldID
where g1.gadgetName = 'micromax'
根据您的示例数据,这将返回:
oldIDgadgetName
---------------
motog
xiamoi
这也可以在完全没有连接的情况下编写(但性能可能更差),如下所示:
select gadgetName
from Gadgets
where id in (
select oldid
from Usage
where newID in (
select id
from Gadgets
where gadgetName = 'micromax'
)
)
谢谢..它成功了,你能告诉我我的查询有什么问题吗?在你的情况下,你做的和我的内部子查询完全一样,但是看到了你的外部查询,你再次尝试加入不需要的小工具和用法,此外,您还没有提供连接条件,也不需要此连接。因此,只能使用连接应用此条件吗…我现在很好奇,是否有任何方法可以在不使用连接的情况下获取数据。(嘿,join比使用多个查询快吗?@SyamiliV我在小提琴中看到的唯一问题是,您必须在正确的窗口中运行查询:@jpw谢谢。是的,Syamili,请使用RunSQL按钮,您将在屏幕底部看到结果。谢谢……您能告诉我,我的查询中出现了什么错误吗EDIT@SyamiliV查询中有两个错误:
gadgets.gadgets=“.datawon.”
应该是gadgets.gadgetname=“.datawon.”
(您可能也需要引用该变量,看起来您可能是用php注入了它?)此外,您还缺少外部查询中的联接:和usage.newID=gadgets.ID
。谢谢,我刚刚更正了变量名…第二个是真的,它是我正在使用的一个php变量。不使用联接是否可以处理此情况。@SyamiliV是的,可以在不使用联接的情况下编写它,我已更新了答案以说明如何处理。i tr我在sqllfiddle中查询了这个问题。你能帮我这里出了什么问题吗