2017-08-10 106 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

舊的方式加入...此方法可能會在將來被棄用 –