3

我正在尝试使用 where 子句选择两个表,

问题:我得到超过 2 个结果。像123451111我只有两个值为 1 的 id。我认为我做错了。

这些表没有相同的结构,并且没有任何关联。有任何想法吗?

<?php include_once("config.php");
   $s = '1';
$stmt =$mydb->prepare("select * FROM table1,table2 where table1.id = ? or table2.id = ?");
stmt->bind_param('ss', $s, $s);
echo $mydb->error;
$stmt->execute();

?>
<?php
$results  = $stmt->get_result();
while ($row = $results->fetch_assoc()) {
echo $row['id']."<br/>";
}
?>
4

3 回答 3

15

您需要在某个唯一列(例如 id)上连接 table1 和 table2。

select * FROM table1,table2 where table1.id = table2.id;

此外,您可以有多个过滤条件(假设您要过滤 id=101 上的表 -

select * 
FROM table1,table2 
where table1.id = table2.id
and table1.id = 101;

希望这可以帮助。每当您在 SQL 语句中有多个表时,您需要将它们连接起来,否则引擎会生成笛卡尔积,就像它在数学集合论的笛卡尔积中发生的那样。

基本上,您应该至少有 n-1 个连接条件,其中 n 是使用的表数。

于 2013-10-29T04:09:08.337 回答
4

您的问题有点问题,但是如果您的问题不是获得两个 id,而是使用 JOIN 正确获得了一个,您可能正在寻找一个 IN 子句:

SELECT * 
FROM table1,table2 
WHERE table1.id = table2.id
AND table1.id IN (ID1, ID2);

使用 IN 而不是 = 可以让您将多个值匹配到 table.id。这样,您可以从两个表中获取数据并获得两个 ID

于 2013-10-30T01:05:19.193 回答
2

这是加入用法:

select t1.*,t2.* FROM table1 t1
left join table2 t2
on t1.id = t2.id
where t1.id = "keyword"
于 2013-10-29T04:14:57.777 回答