我需要执行MYSQL查询以从“table_in”中选择具有与table_1相同格式的用户
table_1
id Field_id user_id value
1 9 1 "hello"
2 10 1 "Multi"
3 9 2 "Something"
4 10 2 "Single"
table_2
id user_id status specs
1 1 "Busy" "this is a test"
2 2 "Idle" "this is another test"
3 2 "Busy" "another test again"
4 1 "Relaxing" "something else"
我需要从table_in中选择用户,其中以下任一项为真
然后将结果保存在新表table_out
中所以到目前为止我得到的是
CREATE TEMPORARY TABLE table_out
SELECT * FROM table_1 WHERE user_id in (SELECT user_id from table_in)
AND (field_id=10 AND value='Multi')
OR (SELECT * from table_2 where status!='Busy')
我不是SQL专家,我上面的MY-SQL语句不起作用。我想也许最后的OR语句是错误的,它试图从table_2中选择状态不忙。
所以基本上放入table_out的用户必须全部来自“table_in”,并且(字段10设置为多个)或table_2中的相同用户(状态!=忙碌)
有人知道怎么做吗?
更新: 找到了自己的解决方案使用table_in,通过仅选择那些非“多”的值来创建第二个表,然后从那个查询table_2中为那些非忙的user_id将其放在另一个表中,然后从table_in中删除这些值。
非常感谢
答案 0 :(得分:1)
您可以使用union语句尝试它。 我这里没有任何mysql数据库来测试它,但它应该看起来像那样
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class PropertyAdvert extends Model
{
protected $fillable = ["photo", "address", "county", "town","type","rent","date","bedrooms","bathrooms","furnished","description",];
}
如果我的问题是对的:)
答案 1 :(得分:0)
从我所看到的......也许这样的东西会起作用......当然,我是SQL Server,但我认为这适用于MySQL。
{{1}}
答案 2 :(得分:0)
您必须使用UNION ALL运算符。
UNION运算符用于组合两个或多个SELECT语句的结果集。
列也必须具有类似的数据类型
每个SELECT语句中的列也必须采用相同的顺序。
CREATE TEMPORARY TABLE table_out
SELECT * FROM table_1 WHERE user_id in (SELECT user_id from table_in) AND (field_id=10 AND value='Multi')
UNION运算符默认情况下仅选择不同的值。允许 重复值,使用UNION ALL
UNION ALL
SELECT t2.id, t_in.field_id, t2.user_id, t_in.value
FROM table_2 AS t2
INNER JOIN table_in AS t_in
ON t2.user_id = t_in.user_id
WHERE t2.status != 'Busy';
答案 3 :(得分:0)
我认为您会发现这符合您的需求:
SELECT *
FROM table_in ti
INNER JOIN table_1 t1
ON t1.user_id = ti.user_id
LEFT OUTER JOIN table_2 t2
ON t2.USER_ID = ti.USER_ID
WHERE (t1.field_id = 10 AND t1.value = 'Multi') OR
t2.status <> 'Busy'
按预期table_2
进行此工作应该是外部(可选)连接。实际上,由于我没有完全掌握问题,因此很可能是桌子2和桌面2应该是外连接。嗯,这对你来说更进一步。
我必须做出一些假设,我将其封装在this SQLFiddle中。请注意,在小提琴中,我只填充了table_in
,user_id
为1,只是为了测试它。根据需要改变它以进一步测试。
祝你好运。
小提琴的代码是:
create table table_in(user_id int);
insert into table_in(user_id) values (1);
create table table_1(id int, field_id int, user_id int, value varchar(20));
insert into table_1 (id, Field_id, user_id, value) values (1, 9 , 1, 'hello');
insert into table_1 (id, Field_id, user_id, value) values (2, 10, 1, 'Multi');
insert into table_1 (id, Field_id, user_id, value) values (3, 9 , 2, 'Something');
insert into table_1 (id, Field_id, user_id, value) values (4, 10, 2, 'Single');
create table table_2 (id int, user_id int, status varchar(10), specs varchar(25));
insert into table_2(id, user_id, status, specs) value (1, 1, 'Busy' , 'this is a test');
insert into table_2(id, user_id, status, specs) value ( 2, 2, 'Idle' , 'this is another test');
insert into table_2(id, user_id, status, specs) value ( 3, 2, 'Busy' , 'another test again');
insert into table_2(id, user_id, status, specs) value ( 4, 1, 'Relaxing' , 'something else');
把它放在这里因为SQLFiddle似乎像今天的乒乓球一样上下线。 : - (