2

使用 phpMyAdmin 5.1.44 试验 DML 命令。

我一直在关注在线教程。

SELECT book.b_isbn, publisher.p_name FROM 'book', 'publisher' WHERE book.b_title='DSA'

表格1

book

b_id(PK)    b_isbn     b_title   p_id(FK)
-----------------------------------------
1           12345      DSA       1
2           23456      SD        1
3           34567      CSP       2

表 2

publisher

p_id(PK)    p_name
--------------------
1           Fred
2           John

预期成绩

b_isbn      p_name
---------------------
12345       Fred

实际结果

b_isbn      p_name
----------------------
12345       Fred
34567       John

有任何想法吗?

4

2 回答 2

1

我认为您需要将 fk 放入 where 语句中的 pk 键

SELECT
    *
FROM
    book, publisher
WHERE
    book.p_id=publisher.p_id
    AND book.b_title='DSA'

甚至更好地使用JOINs:

SELECT
    *
FROM
   book
   JOIN publisher
     ON book.p_id=publisher.p_id
WHERE
   book.b_title='DSA'

或者,如果您不确定是否有相应的值,请使用left join. 像这样:

SELECT
    *
FROM
   book
   LEFT JOIN publisher
     ON book.p_id=publisher.p_id
WHERE
   book.b_title='DSA'
于 2012-04-25T12:46:05.477 回答
1

您需要告诉 MySQL 如何将表连接在一起(没有它,它只会将每本书与每个出版商匹配) - 使用以下任何一种:

  1. 添加AND publisher.p_id = book.p_id到您的WHERE条款中;

  2. 告诉 MySQL 加入ON那个条件/USING那个列;

    ... FROM book JOIN publisher ON publisher.p_id = book.p_id WHERE ...
    

    或者

    ... FROM book JOIN publisher USING (p_id) WHERE ...
    
  3. 使用 aNATURAL JOIN让 MySQL 根据列名猜测这是您想要的。

    ... FROM book NATURAL JOIN publisher WHERE ...
    
于 2012-04-25T12:47:43.487 回答