从两个不同表中的相同命名字段获取数据

时间:2015-10-25 21:25:16

标签: mysql

我在从2个不同的表中选择数据时遇到问题。 表1和表2都有字段' ID'和'类别'

我试图让所有' ID'类别' = 100001

我可以从Table1那样做:

$ids = @mysql_values('SELECT ID FROM Table1 WHERE Live = 1 AND Categories = 100001 ORDER BY Rand() LIMIT 20');

这很有效。

但是当我尝试使用我有限的知识进行联接时,它并不起作用。这是我加入的查询,但无法解决原因:

$ids = @mysql_values('SELECT Table1.ID, Table2.ID FROM Table1, Table2 WHERE Live = 1 AND Categories = 100001 ORDER BY Rand() LIMIT 20');

任何帮助表示赞赏。我看了其他的例子并尝试了但无济于事。

干杯

3 个答案:

答案 0 :(得分:2)

这相当于CROSS JOIN

SELECT Table1.ID, Table2.ID 
FROM Table1, Table2 
WHERE Live = 1 
  AND Categories = 100001 
ORDER BY Rand()
LIMIT 20

您可能想要JOIN表:

SELECT *
FROM Table1 t1
JOIN Table2 t2
  ON t1.<pk> = t2.<fk>     -- you need to join both tables
WHERE Live = 1             -- add t1.Live/t2.Live dependent on table
  AND Categories = 100001  -- same as above
ORDER BY Rand()
LIMIT 20

答案 1 :(得分:1)

看起来你走在正确的轨道上。

由于问题是这两个表都有categories列,您可能希望得到类似下面的内容:

$ids = @mysql_values('SELECT Table1.ID, Table2.ID FROM Table1, Table2 WHERE Live = 1 AND 100001 IN (Table1.Categories, Table2.Categories) ORDER BY Rand() LIMIT 20');

请注意我如何将Categories = 100001更改为100001 IN (Table1.Categories, Table2.Categories)

答案 2 :(得分:1)

我认为您正在寻找UNION

SELECT ID, Categories
FROM Table1
WHERE Live = 1 AND Categories = 100001
UNION
SELECT ID, Categories
FROM Table2
WHERE Live = 1 AND Categories = 100001
ORDER BY Rand()
LIMIT 20;

或者,如果您希望只有一次条件:

SELECT *
FROM (
    SELECT ID, Categories
    FROM Table1
    UNION
    SELECT ID, Categories
    FROM Table2)
WHERE Live = 1 AND Categories = 100001
ORDER BY Rand()
LIMIT 20;