【问题标题】:Error doing a Full Outer Join执行完全外部联接时出错
【发布时间】:2017-10-27 23:10:32
【问题描述】:

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 ║
╚═══════════════════╩══════╩═════════╩═════════╩════╩═══════╩═════════╩═════════════════════╝

【问题讨论】:

  • 每个ref 似乎在两个表中都相同。为什么您的预期结果只有一条记录。和你的sqljoin同一张表product
  • @Forward 啊,是这个问题吗?我是 MySQL 新手,所以对关系数据库一无所知。现在我明白了,我猜列名应该不同,这就是它不起作用的原因。
  • @Forward 这是我的数据库结构:pastebin.com/6A0E1xUM
  • 所有这些表都使用ref?
  • 嗯,是的,请原谅我的愚蠢。第一次创建数据库。

标签: php mysql medoo


【解决方案1】:

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.*"]);

【讨论】:

  • 刚刚注意到它显示第一行两次的唯一问题。
猜你喜欢
  • 2011-07-26
  • 2021-11-17
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 2011-01-06
相关资源
最近更新 更多