【问题标题】:MySQL: Selecting from multiple tables that have no relationshipMySQL:从多个没有关系的表中选择
【发布时间】:2017-10-17 02:53:39
【问题描述】:

第一次发帖,温柔点!我的 SQL 知识充其量只是平均水平。

我有 2 个彼此没有直接关系的表。

  • TableA(“CustomerWishList”),列“bookID”,其他书籍数据, 等等等等等等
  • TableB(“CustomerOwned”),包含列 - “bookID”、other-book-data 等

一本书可以在一个、两个或任何一个表中。

我需要创建 SQL 语句来计算 TableA 或 TableB 中 "bookID='data'" 出现的次数。

到目前为止,我使用 PHP 搜索 TableA "bookID" 列,然后如果没有找到,接下来搜索 TableB "bookID" 列...它有效,但效率低下,并且确信必须有更好的方法.

JOIN 语句似乎不适用于这里? - 我可能是错的。


更新

我目前正在使用的伪 PHP 代码:

$total=SELECT COUNT(*) FROM CustomerWishList WHERE BOOKID=1234

if ($total==0) {
    $total2=SELECT COUNT(*) FROM CustomerOwned WHERE BOOKID=1234
}  
return $total2;

【问题讨论】:

  • 发布您在此处提到的 PHP 代码可能会有所帮助。
  • 普通 bookID 是一个关系。由于您没有展示您尝试过的所有内容,我们真正能做的就是给您一些建议:您可以使用 COUNT IF 或 CASE 实现您想要的 - 研究它们。
  • 由于我们没有完整的信息,我们无法确定一切是如何设置的。只是想给一个友好的建议。如果我认为您可以在两个表中都有一本书,所有数据都相同,那么最好有一个包含所有书籍及其数据的表。然后有另一个名为 CustomerWishList 的表,它只保存 UserID 和 bookID 以及另一个名为 CustomerOwned 的表。然后,您不需要拥有所有信息的多个副本。这里可能不是这种情况,但如果是这样的话,只是一个小费。祝你好运。
  • 感谢反馈 - 我在上面添加了一些伪代码

标签: php mysql join


【解决方案1】:

以下查询将为您提供仅在表 A 中的图书 ID 计数:

SELECT count(1) as `count`
FROM tableA
WHERE NOT EXISTS
 (SELECT bookID FROM tableB WHERE bookID = tableA.bookID);

同样,以下查询将为您提供仅在表 B 中的图书 ID 的计数:

SELECT count(1) as `count`
FROM tableB
WHERE NOT EXISTS
 (SELECT bookID FROM tableA WHERE bookID = tableB.bookID);

现在,如果您想add 这两个,那么您可以使用以下查询:

SELECT `a.count` + `b.count`
FROM ( 
 SELECT count(1) as `count`
 FROM tableA
 WHERE NOT EXISTS
  (SELECT bookID FROM tableB WHERE bookID = tableA.bookID)
 ) a,
(
 SELECT count(1) as `count`
 FROM tableB
 WHERE NOT EXISTS
  (SELECT bookID FROM tableA WHERE bookID = tableB.bookID);
) b;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2021-06-19
    • 2015-07-17
    • 2017-01-24
    • 2015-01-02
    相关资源
    最近更新 更多