2016-05-25 11 views
0

は私が3つのテーブルを作成:製品、記事とcategory.Iは、外部キーのためのテーブルに参加しました:外部キーおよび更新記録

CREATE TABLE `products` (
    `id` int(11) AUTO_INCREMENT PRIMARY KEY, 
    `added` varchar(30) NOT NULL, 
    `nazwa` int(11) NOT NULL, 
    `kategoria` int(11) DEFAULT NULL, 
    `sn` varchar(100) NOT NULL, 
    `quantity` int(10) NOT NULL, 
    `data` date NOT NULL, 
    `godzina` time NOT NULL, 
    `warranty` date NOT NULL, 
    FOREIGN KEY (`nazwa`) REFERENCES `article`(`article_id`), 
    FOREIGN KEY (`kategoria`) REFERENCES `category` (`category_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci; 

すべてが正常に動作します。問題は、テーブル製品でレコードを更新しようとするときです。

は、私はこれを試してみてください。しかし、このクエリは

UPDATE `products` 
SET 
    `added` = 'michal', 
    `nazwa` = 'ball', 
    `kategoria` = 'toys', 
    `sn` = '14dsa564dsa65', 
    `data` = NOW(), 
    `godzina` = CURTIME() 

WHERE 
    `id` = 13  

働いていません。私が使用したアップデートのために

SELECT 
    products.id, 
    products.added, 
    article.nazwa, 
    category.kategoria, 
    products.sn, 
    products.quantity, 
    products.data, 
    products.godzina, 
    products.warranty 
FROM 
    products 
     LEFT JOIN 
    category ON products.kategoria = category.category_id 
     LEFT JOIN 
    article ON products.nazwa = article.article_id 
ORDER BY id 

::私はdatbaseからレコードを返す習慣

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (test . products , CONSTRAINT products_ibfk_1 FOREIGN KEY (nazwa) REFERENCES article (article_id)) 0.157 sec

見て私はこのクエリを使用し

UPDATE `products` 
SET 
    products.added= 'michal', 
    article.nazwa= 'ball', 
    category.kategoria = 'toys', 
    products.sn= '14dsa564dsa65', 
    products.data = NOW(), 
    products.godzina = CURTIME(), 

LEFT JOIN 
    category ON products.kategoria = category.category_id 
     LEFT JOIN 
    article ON products.nazwa = article.article_id 
WHERE 
    `id` = 13  

が、スローエラー:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'LEFT JOIN category ON products.kategoria = category.category_id LEFT' at line 10 0.000 sec

+0

を必要とされていませんそして、あなたはすべてのエラーメッセージ – RiggsFolly

+0

を得るのですかJOINの両方を削除するには、 'nazwa'および/またはまだのarticle_id'としては存在しない値を持つ 'kategoria'を更新しようとしています他の2つのテーブルに既に存在していなければなりません – RiggsFolly

+0

どのような左の結合は何ですか?私はそれらを削除し、すべてがうまく動作すると言うだろう。 –

答えて

2

あなたの問題は、articleテーブルは

article_id ='piłeczka pingpongowa' 

と行が含まれていないと、この列は、INT(11)のように定義されるように、とにかくこの列に行かないだろう。

そして、あなたのcategoryの表は、この列には、あなたのスキーマにINT(11)のように定義されて

category.category_id = 'zabawki2' 

で行が含まれていません!これも機能しません。

親を作成する前に子供を作成することはできません!

また、彼らは

+0

はい、ありがとうございます。 – major697

関連する問題