2012-04-25 71 views
2

使用phpMyAdmin 5.1.44试验DML命令。MySQL多选择模糊结果

我一直在线下面的教程。

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 

任何想法?

回答

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. 使用NATURAL JOIN拥有的MySQL想这就是你基于列名想要什么。

    ... FROM book NATURAL JOIN publisher WHERE ... 
    
1

我认为你需要把FK到PK的关键在哪里声明

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

甚至更​​好使用JOIN S:

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'