2017-05-27 26 views
1

product表:錯誤做一個完全外部聯接

╔══════════════════════════════════╦═══════════╦═══════════════════╦════════════════════╦════╗ 
║    ref    ║ mfr ║  pnum  ║  ssku  ║ id ║ 
╠══════════════════════════════════╬═══════════╬═══════════════════╬════════════════════╬════╣ 
║ 6541_aten_2a-130g    ║ Aten  ║ 2A-130G   ║ 2A-130G   ║ 6 ║ 
║ 7466_eaton_5sc1000i    ║ Eaton  ║ 5SC1000I   ║     ║ 8 ║ 
║ 8214_ivanti-uk_template-material ║ IVANTI UK ║ TEMPLATE MATERIAL ║ 000000000003616655 ║ 4 ║ 
║ 8361_aywun_92sfan1    ║ Aywun  ║ 92SFAN1   ║ 92SFAN    ║ 9 ║ 
║ 9824_autodesk_00100-000000-9880 ║ AUTODESK ║ 00100-000000-9880 ║ 00100-000000-9880 ║ 5 ║ 
╚══════════════════════════════════╩═══════════╩═══════════════════╩════════════════════╩════╝ 

inventory表:

╔══════════════════════════════════╦═══════╦═════════╦═════════════════════╗ 
║    ref    ║ scost ║ instock ║  date   ║ 
╠══════════════════════════════════╬═══════╬═════════╬═════════════════════╣ 
║ 6541_aten_2a-130g    ║ 26 ║  0 ║ 2017-05-27 10:45:23 ║ 
║ 7466_eaton_5sc1000i    ║ 489 ║  0 ║ 2017-05-27 10:45:23 ║ 
║ 8214_ivanti-uk_template-material ║  0 ║  0 ║ 2017-05-27 10:45:23 ║ 
║ 8361_aywun_92sfan1    ║  4 ║  0 ║ 2017-05-27 10:45:23 ║ 
║ 9824_autodesk_00100-000000-9880 ║ 738 ║  0 ║ 2017-05-27 10:45:23 ║ 
╚══════════════════════════════════╩═══════╩═════════╩═════════════════════╝ 

...,我希望從兩個表做一個FULL OUTER JOIN(得到列只有當關鍵使用Medoo存在於兩個,如果我理解正確):

$data = $database->select("product", [ 
    "[<>]inventory" => ["ref" => "ref"], 
]); 

錯誤:

Invalid argument supplied for foreach() in /var/www/html/vendor/catfan/medoo/src/Medoo.php on line 

我也嘗試過這些查詢的控制檯,但得到一個語法錯誤:

SELECT * 
FROM product 
FULL OUTER JOIN product ON product.ref = inventory.ref; 

SELECT * FROM `product`, * FROM `inventory` 
WHERE product.`ref` = inventory.`ref`; 

預期結果:

╔═══════════════════╦══════╦═════════╦═════════╦════╦═══════╦═════════╦═════════════════════╗ 
║  ref  ║ mfr ║ pnum ║ ssku ║ id ║ scost ║ instock ║  date   ║ 
╠═══════════════════╬══════╬═════════╬═════════╬════╬═══════╬═════════╬═════════════════════╣ 
║ 6541_aten_2a-130g ║ Aten ║ 2A-130G ║ 2A-130G ║ 6 ║ 26 ║  0 ║ 2017-05-27 10:45:23 ║ 
╚═══════════════════╩══════╩═════════╩═════════╩════╩═══════╩═════════╩═════════════════════╝ 
+0

每個'ref'小號eems在兩個表中是相同的。爲什麼你的預期結果只有一個記錄。而你的sql'加入'同一個表'產品'。 – Blank

+0

@Forward啊,是這個問題嗎?我是MySQL的新手,所以沒有關於關係數據庫的線索。現在我明白了,列名應該是不同的我猜,這就是爲什麼它不工作。 – 3zzy

+0

@Forward這是我的數據庫結構:https://pastebin.com/6A0E1xUM – 3zzy

回答

2

MySQL不支持FULL OUTER JOIN,和你的邏輯似乎是INNER JOIN

SELECT * 
FROM product 
INNER JOIN inventory ON product.`ref` = inventory.`ref`; 

但我不知道爲什麼兩個表中ref的都是一樣的,您預期的結果只有一個記錄,根據Medoo文檔,代碼應該像如下:

$data = $database->select(
    "product", 
    [ 
     "[><]inventory" => "ref" 
    ], 
    "*"); 

對於所有的表的,試試這個:

$data = $database->select(
    "product", 
    [ 
     "[><]inventory" => "ref", 
     "[><]detail" => "ref", 
     "[><]moredetails" => "ref", 
     "[><]info" => "ref", 
     "[><]images" => "ref", 
     "[><]features" => "ref", 
     "[><]categories" => "ref", 
     "[><]tags" => "ref" 
    ], 
    ["product.*", "inventory.*"]); 
+0

太棒了,按預期工作!謝謝! – 3zzy

+0

只注意到它顯示第一行兩次的唯一問題。 – 3zzy

相關問題