Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql joinsql命令的使用_Mysql_Join - Fatal编程技术网

Mysql joinsql命令的使用

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

我有两张桌子——小工具和用法。小工具具有唯一的ID和相应的字段。而用法显示的用法与小工具的旧ID值和新ID值类似

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中查询了这个问题。你能帮我这里出了什么问题吗