如何仅打印另一个表中不存在的表的值 - mySQL

时间:2015-06-25 14:28:29

标签: php mysql

在我的SQL数据库中,我有一个表namend" orders"。正如你所看到的那样,人们订购了#34; cat"," dog"和"青蛙":

id | name 
---------
1  | cat   
2  | dog  
3  | frog    

我可以这样打印我的订单:

$pdo = Database::connect();
$sql = 'SELECT * FROM orders ORDER BY id DESC';

foreach ($pdo->query($sql) as $row) {
    echo($row['name'].' ');
}

得到结果:猫狗青蛙

现在我有另一张名为" inventory":

的库存表
id | name 
---------
1  | cat   
2  | dog  
3  | frog    
4  | duck  

我的网站上有一个选择框,显示我的库存

<select name="animals">

<?php 
$sql = 'SELECT * FROM inventory ORDER BY id DESC';

foreach ($pdo->query($sql) as $row) {
  echo('<option value="'.$row['name'].'">'.$row['name'].'</option>');
}                   
?>
</select>

我现在要做的是在我的选择框内显示只有我的订单表中没有的库存。 这意味着在这种情况下我的选择框应该只有选项&#34; duck&#34;。

如何更改我的选择框以实现我的需要。

2 个答案:

答案 0 :(得分:1)

在查询中添加子选择:

SELECT * FROM inventory WHERE name NOT IN (SELECT name FROM orders) ORDER BY id DESC

答案 1 :(得分:0)

另一种解决方案是使用UNION ALL并检查只出现一次的名称

SELECT name
FROM
(
  SELECT tableOrdered.name
  FROM tableOrdered
  UNION ALL
  SELECT TableInventory.name
  FROM TableInventory
)t
GROUP BY name
HAVING COUNT(*) = 1
ORDER BY name