2017-08-10 141 views
0

我遇到了SELECT查询问题,它不是返回给我一个值,而是给我太多问题。 下面的查询:Mysql SELECT查询返回双精度值

  SELECT costi.id, costo, descrizione, categoria 
      FROM costi 
      INNER JOIN categorie 
      WHERE costi.id = 140 

的从DB查询才对数据与两个表(COSTI和categorie) db structure

时遇到的问题是,: 如果,例如,我运行在PHP上查询我的管理员(通过输入代替$ _POST ['id'],代价为140的代价),而不是仅返回关联数据的一行,它返回两行(每个类别I已创建)。 query result

它们是相同的行,具有相同的值,但不同的类别字段除外。 我只需要返回一行正确的数据。

+1

你不指定为参加任何条件。换句话说,你在连接之后缺少一个'on'语句。 – Utkanos

+0

请指定一些条件加入。否则,它将像现在一样填充 –

+0

如果您没有指定ON语句,那么INNER JOIN将作为CROSS JOIN工作,而不需要重复记录。没有人解释为什么会发生,所以我会解释它。 –

回答

0

看起来应该是:

SELECT costi.id, costo, descrizione, categoria 
FROM costi 
INNER JOIN categorie 
    ON costi.id = categorie.id --note the join condition 
WHERE costi.id = 140 
0

寻找到你的查询结果..

你可以使用GROUP_CONCAT在一排得到的结果

SELECT costo, descrizione, group_concat(categoria) 
     FROM costi 
     INNER JOIN categorie 
     WHERE costi.id = 140 
group by costo, descrizione 
0

你需要使用JOIN语句中的外键加入2个表格

SELECT costi.id, costo, descrizione, categoria 
FROM costi 
    INNER JOIN categorie ON categorie.id = costi.idcatagoria 
WHERE costi.id = 140 

现在查询知道哪两个表中的行是相互关联的

0

可以有2种方法:

  1. 使用下面的查询避免INNER JOIN

    SELECT h.id, h.costo, h.descrizione, i.categoria 
        FROM costi h, categorie i 
        WHERE h.id = 140 and h.idcategoria=i.id 
    
  2. 您可以使用GROUP BYINNER JOIN

+0

为什么你删除JOIN优先于AND? 2步回力沃利 – RiggsFolly

+0

他们基本上是一回事。请参考https:// stackoverflow。com/questions/44917/explicit-vs-implicit-sql-joins –

+0

但是,为什么要改变OP的代码,因为你认为没有好处 – RiggsFolly

-1

指定加入的任何条件。 像table.id ...

指定条件,那么你会得到有限的结果

0

使用下面的查询避免INNER JOIN:

SELECT h.id, h.costo, h.descrizione, i.categoria 
    FROM costi h, categorie i 
    WHERE h.id = 140 and h.idcategoria=i.id 
+0

旧的方式加入...此方法可能会在将来被弃用 –