MySQL:如何根据另一个表中的可用性进行选择

时间:2017-01-02 15:05:01

标签: php mysql sql join left-join

我必须使用名为booksauthors的表格。

这是我的books表:

books table

它包含书名,作者姓名和书的描述。

这是我的authors表:

authors table

它包含作者姓名,作者所在的城市和作者肖像(描述)。

我的问题是:我如何SELECT *来自books的作者所在城市的行如Berlin表中的authors

在这种情况下,当city = Berlin时,应选择title = "Something title AAA"title = "Something title DDD"的行。

这是我尝试过的:

$stmt = $pdo->prepare('SELECT title, author, description FROM books JOIN authors ON :city = city');

$stmt->execute(array(':city' => "Berlin"));

但它没有用。我没有输出。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您需要以下查询的结果:

SELECT books.* FROM books INNER JOIN authors ON books.author = authors.name
WHERE authors.city = 'Berlin'

使用PHP / PDO,它如下所示:

$stmt = $pdo->prepare('SELECT books.* FROM books INNER JOIN authors ON books.author = authors.name WHERE authors.city = :city');
$stmt->execute(array(':city' => "Berlin"));

查询的ON部分定义了表booksauthors之间的关系。在加入之后,您可以将两个表想象成一个包含所有列的大表。在查询的WHERE部分,您可以定义过滤器,以获取作者来自指定books的所有:city(在您的示例中为柏林)。