在一个sql中连接3个表

时间:2012-09-07 00:06:19

标签: mysql sql

我有3个表,如下所述,

table1 'ads'

 id     userid
 1       47
 2       47                    //ads.id  = adcat.adid
 3       45
 4       47

table2  'adcat'

  adid    catid
   1        1
   2        3
   3        3                 // adcat.catid  = categories.id
   4        3

 table3  'categories'

   id        name
    1        mathematic
    2        biolog
    3        leteratur
    4        chemi

我想要的是从categories.id获取ads.id

我试过这个

SELECT categories.id, ads.id 
FROM ads 
INNER JOIN adcat ON ads.id = adcat.adid 
INNER JOIN categories ON categories.id = adcat.catid 

但它没有确切的价值。

obs:我没有得到任何错误,只是没有确切的价值。 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

如果adcat.catid = categories.id,这似乎没有理由进入类别表,这是您需要的唯一值。

SELECT ads.id,adcat.catid
FROM ads
INNER JOIN adcat
ON ads.id=adcat.adid

对此查询使用$row['catid']

如果您将来需要更多类别列,则需要双重加入:

SELECT categories.id *AS id*,ads.id *AS ads_id*
FROM ads 
INNER JOIN adcat ON ads.id = adcat.adid  
INNER JOIN categories ON categories.id = adcat.catid

对此查询使用$row['id']

请参阅*AS id**AS ads_id* - 删除星标,并为列添加ALIAS,这基本上就像一个昵称,这在许多情况下都很方便,但在此方面尤为重要因为两列都具有相同的名称。所以现在你可以调用$row['id']并获取categories.id

答案 1 :(得分:1)

我不确定究竟是什么问题,但我认为你试图在一个广告基础上排除一行而不是单行。如果是这样的话:

SELECT categories.id ,ads.id 
FROM ads 
INNER JOIN adcat ON ads.id = adcat.adid  
INNER JOIN categories ON categories.id = adcat.catid
WHERE ads.id = your_id_here

答案 2 :(得分:0)

试试这个:

SELECT categories.id, ads.id 
FROM ads, adscat, categories
WHERE ads.id=adcat.adid
AND categories.id = adcat.catid