2012-04-25 3 views
2

Использование phpMyAdmin 5.1.44 для экспериментов с командами DML.MySQL Multiple Select Ambiguous Results

Я слежу за учебниками он-лайн.

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 к ключу рк в где заявление

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' 

 Смежные вопросы

  • Нет связанных вопросов^_^